3722 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=GFX9 %s3; RUN: llc -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1010 -mattr=+wavefrontsize64 < %s | FileCheck -check-prefixes=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 9; --------------------------------------------------------------------------------10; atomicrmw max11; --------------------------------------------------------------------------------12 13define amdgpu_ps float @global_max_saddr_i32_rtn(ptr addrspace(1) inreg %sbase, i32 %voffset, i32 %data) {14; GFX9-LABEL: global_max_saddr_i32_rtn:15; GFX9: ; %bb.0:16; GFX9-NEXT: v_mov_b32_e32 v2, v017; GFX9-NEXT: global_load_dword v0, v0, s[2:3]18; GFX9-NEXT: v_mov_b32_e32 v3, s319; GFX9-NEXT: v_add_co_u32_e32 v2, vcc, s2, v220; GFX9-NEXT: v_addc_co_u32_e32 v3, vcc, 0, v3, vcc21; GFX9-NEXT: s_mov_b64 s[0:1], 022; GFX9-NEXT: .LBB0_1: ; %atomicrmw.start23; GFX9-NEXT: ; =>This Inner Loop Header: Depth=124; GFX9-NEXT: s_waitcnt vmcnt(0)25; GFX9-NEXT: v_mov_b32_e32 v5, v026; GFX9-NEXT: v_max_i32_e32 v4, v5, v127; GFX9-NEXT: global_atomic_cmpswap v0, v[2:3], v[4:5], off glc28; GFX9-NEXT: s_waitcnt vmcnt(0)29; GFX9-NEXT: buffer_wbinvl130; GFX9-NEXT: v_cmp_eq_u32_e32 vcc, v0, v531; GFX9-NEXT: s_or_b64 s[0:1], vcc, s[0:1]32; GFX9-NEXT: s_andn2_b64 exec, exec, s[0:1]33; GFX9-NEXT: s_cbranch_execnz .LBB0_134; GFX9-NEXT: ; %bb.2: ; %atomicrmw.end35; GFX9-NEXT: s_or_b64 exec, exec, s[0:1]36; GFX9-NEXT: ; return to shader part epilog37;38; GFX10-LABEL: global_max_saddr_i32_rtn:39; GFX10: ; %bb.0:40; GFX10-NEXT: v_mov_b32_e32 v2, v041; GFX10-NEXT: global_load_dword v0, v0, s[2:3]42; GFX10-NEXT: v_add_co_u32 v2, s[0:1], s2, v243; GFX10-NEXT: v_add_co_ci_u32_e64 v3, s[0:1], s3, 0, s[0:1]44; GFX10-NEXT: s_mov_b64 s[0:1], 045; GFX10-NEXT: .LBB0_1: ; %atomicrmw.start46; GFX10-NEXT: ; =>This Inner Loop Header: Depth=147; GFX10-NEXT: s_waitcnt vmcnt(0)48; GFX10-NEXT: v_mov_b32_e32 v5, v049; GFX10-NEXT: v_max_i32_e32 v4, v5, v150; GFX10-NEXT: global_atomic_cmpswap v0, v[2:3], v[4:5], off glc51; GFX10-NEXT: s_waitcnt vmcnt(0)52; GFX10-NEXT: buffer_gl1_inv53; GFX10-NEXT: buffer_gl0_inv54; GFX10-NEXT: v_cmp_eq_u32_e32 vcc, v0, v555; GFX10-NEXT: s_or_b64 s[0:1], vcc, s[0:1]56; GFX10-NEXT: s_andn2_b64 exec, exec, s[0:1]57; GFX10-NEXT: s_cbranch_execnz .LBB0_158; GFX10-NEXT: ; %bb.2: ; %atomicrmw.end59; GFX10-NEXT: s_or_b64 exec, exec, s[0:1]60; GFX10-NEXT: ; return to shader part epilog61;62; GFX11-LABEL: global_max_saddr_i32_rtn:63; GFX11: ; %bb.0:64; GFX11-NEXT: v_mov_b32_e32 v2, v065; GFX11-NEXT: global_load_b32 v0, v0, s[2:3]66; GFX11-NEXT: v_add_co_u32 v2, s[0:1], s2, v267; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)68; GFX11-NEXT: v_add_co_ci_u32_e64 v3, null, s3, 0, s[0:1]69; GFX11-NEXT: s_mov_b64 s[0:1], 070; GFX11-NEXT: s_waitcnt_depctr depctr_sa_sdst(0)71; GFX11-NEXT: .LBB0_1: ; %atomicrmw.start72; GFX11-NEXT: ; =>This Inner Loop Header: Depth=173; GFX11-NEXT: s_waitcnt vmcnt(0)74; GFX11-NEXT: v_mov_b32_e32 v5, v075; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)76; GFX11-NEXT: v_max_i32_e32 v4, v5, v177; GFX11-NEXT: global_atomic_cmpswap_b32 v0, v[2:3], v[4:5], off glc78; GFX11-NEXT: s_waitcnt vmcnt(0)79; GFX11-NEXT: buffer_gl1_inv80; GFX11-NEXT: buffer_gl0_inv81; GFX11-NEXT: v_cmp_eq_u32_e32 vcc, v0, v582; GFX11-NEXT: s_or_b64 s[0:1], vcc, s[0:1]83; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)84; GFX11-NEXT: s_and_not1_b64 exec, exec, s[0:1]85; GFX11-NEXT: s_cbranch_execnz .LBB0_186; GFX11-NEXT: ; %bb.2: ; %atomicrmw.end87; GFX11-NEXT: s_or_b64 exec, exec, s[0:1]88; GFX11-NEXT: ; return to shader part epilog89;90; GFX12-LABEL: global_max_saddr_i32_rtn:91; GFX12: ; %bb.0:92; GFX12-NEXT: v_mov_b32_e32 v2, v093; GFX12-NEXT: global_load_b32 v0, v0, s[2:3]94; GFX12-NEXT: v_add_co_u32 v2, s[0:1], s2, v295; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)96; GFX12-NEXT: v_add_co_ci_u32_e64 v3, null, s3, 0, s[0:1]97; GFX12-NEXT: s_mov_b64 s[0:1], 098; GFX12-NEXT: .LBB0_1: ; %atomicrmw.start99; GFX12-NEXT: ; =>This Inner Loop Header: Depth=1100; GFX12-NEXT: s_wait_loadcnt 0x0101; GFX12-NEXT: v_mov_b32_e32 v5, v0102; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)103; GFX12-NEXT: v_max_i32_e32 v4, v5, v1104; GFX12-NEXT: global_wb scope:SCOPE_SYS105; GFX12-NEXT: s_wait_storecnt 0x0106; GFX12-NEXT: global_atomic_cmpswap_b32 v0, v[2:3], v[4:5], off th:TH_ATOMIC_RETURN scope:SCOPE_SYS107; GFX12-NEXT: s_wait_loadcnt 0x0108; GFX12-NEXT: global_inv scope:SCOPE_SYS109; GFX12-NEXT: v_cmp_eq_u32_e32 vcc, v0, v5110; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)111; GFX12-NEXT: s_or_b64 s[0:1], vcc, s[0:1]112; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)113; GFX12-NEXT: s_and_not1_b64 exec, exec, s[0:1]114; GFX12-NEXT: s_cbranch_execnz .LBB0_1115; GFX12-NEXT: ; %bb.2: ; %atomicrmw.end116; GFX12-NEXT: s_or_b64 exec, exec, s[0:1]117; GFX12-NEXT: s_wait_loadcnt 0x0118; GFX12-NEXT: ; return to shader part epilog119 %zext.offset = zext i32 %voffset to i64120 %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset121 %rtn = atomicrmw max ptr addrspace(1) %gep0, i32 %data seq_cst122 %cast.rtn = bitcast i32 %rtn to float123 ret float %cast.rtn124}125 126define amdgpu_ps float @global_max_saddr_i32_rtn_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, i32 %data) {127; GFX9-LABEL: global_max_saddr_i32_rtn_neg128:128; GFX9: ; %bb.0:129; GFX9-NEXT: v_mov_b32_e32 v2, v0130; GFX9-NEXT: global_load_dword v0, v0, s[2:3] offset:-128131; GFX9-NEXT: v_mov_b32_e32 v3, s3132; GFX9-NEXT: v_add_co_u32_e32 v2, vcc, s2, v2133; GFX9-NEXT: v_addc_co_u32_e32 v3, vcc, 0, v3, vcc134; GFX9-NEXT: s_mov_b64 s[0:1], 0135; GFX9-NEXT: .LBB1_1: ; %atomicrmw.start136; GFX9-NEXT: ; =>This Inner Loop Header: Depth=1137; GFX9-NEXT: s_waitcnt vmcnt(0)138; GFX9-NEXT: v_mov_b32_e32 v5, v0139; GFX9-NEXT: v_max_i32_e32 v4, v5, v1140; GFX9-NEXT: global_atomic_cmpswap v0, v[2:3], v[4:5], off offset:-128 glc141; GFX9-NEXT: s_waitcnt vmcnt(0)142; GFX9-NEXT: buffer_wbinvl1143; GFX9-NEXT: v_cmp_eq_u32_e32 vcc, v0, v5144; GFX9-NEXT: s_or_b64 s[0:1], vcc, s[0:1]145; GFX9-NEXT: s_andn2_b64 exec, exec, s[0:1]146; GFX9-NEXT: s_cbranch_execnz .LBB1_1147; GFX9-NEXT: ; %bb.2: ; %atomicrmw.end148; GFX9-NEXT: s_or_b64 exec, exec, s[0:1]149; GFX9-NEXT: ; return to shader part epilog150;151; GFX10-LABEL: global_max_saddr_i32_rtn_neg128:152; GFX10: ; %bb.0:153; GFX10-NEXT: v_mov_b32_e32 v2, v0154; GFX10-NEXT: global_load_dword v0, v0, s[2:3] offset:-128155; GFX10-NEXT: v_add_co_u32 v2, s[0:1], s2, v2156; GFX10-NEXT: v_add_co_ci_u32_e64 v3, s[0:1], s3, 0, s[0:1]157; GFX10-NEXT: s_mov_b64 s[0:1], 0158; GFX10-NEXT: .LBB1_1: ; %atomicrmw.start159; GFX10-NEXT: ; =>This Inner Loop Header: Depth=1160; GFX10-NEXT: s_waitcnt vmcnt(0)161; GFX10-NEXT: v_mov_b32_e32 v5, v0162; GFX10-NEXT: v_max_i32_e32 v4, v5, v1163; GFX10-NEXT: global_atomic_cmpswap v0, v[2:3], v[4:5], off offset:-128 glc164; GFX10-NEXT: s_waitcnt vmcnt(0)165; GFX10-NEXT: buffer_gl1_inv166; GFX10-NEXT: buffer_gl0_inv167; GFX10-NEXT: v_cmp_eq_u32_e32 vcc, v0, v5168; GFX10-NEXT: s_or_b64 s[0:1], vcc, s[0:1]169; GFX10-NEXT: s_andn2_b64 exec, exec, s[0:1]170; GFX10-NEXT: s_cbranch_execnz .LBB1_1171; GFX10-NEXT: ; %bb.2: ; %atomicrmw.end172; GFX10-NEXT: s_or_b64 exec, exec, s[0:1]173; GFX10-NEXT: ; return to shader part epilog174;175; GFX11-LABEL: global_max_saddr_i32_rtn_neg128:176; GFX11: ; %bb.0:177; GFX11-NEXT: v_mov_b32_e32 v2, v0178; GFX11-NEXT: global_load_b32 v0, v0, s[2:3] offset:-128179; GFX11-NEXT: v_add_co_u32 v2, s[0:1], s2, v2180; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)181; GFX11-NEXT: v_add_co_ci_u32_e64 v3, null, s3, 0, s[0:1]182; GFX11-NEXT: s_mov_b64 s[0:1], 0183; GFX11-NEXT: s_waitcnt_depctr depctr_sa_sdst(0)184; GFX11-NEXT: .LBB1_1: ; %atomicrmw.start185; GFX11-NEXT: ; =>This Inner Loop Header: Depth=1186; GFX11-NEXT: s_waitcnt vmcnt(0)187; GFX11-NEXT: v_mov_b32_e32 v5, v0188; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)189; GFX11-NEXT: v_max_i32_e32 v4, v5, v1190; GFX11-NEXT: global_atomic_cmpswap_b32 v0, v[2:3], v[4:5], off offset:-128 glc191; GFX11-NEXT: s_waitcnt vmcnt(0)192; GFX11-NEXT: buffer_gl1_inv193; GFX11-NEXT: buffer_gl0_inv194; GFX11-NEXT: v_cmp_eq_u32_e32 vcc, v0, v5195; GFX11-NEXT: s_or_b64 s[0:1], vcc, s[0:1]196; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)197; GFX11-NEXT: s_and_not1_b64 exec, exec, s[0:1]198; GFX11-NEXT: s_cbranch_execnz .LBB1_1199; GFX11-NEXT: ; %bb.2: ; %atomicrmw.end200; GFX11-NEXT: s_or_b64 exec, exec, s[0:1]201; GFX11-NEXT: ; return to shader part epilog202;203; GFX12-LABEL: global_max_saddr_i32_rtn_neg128:204; GFX12: ; %bb.0:205; GFX12-NEXT: v_mov_b32_e32 v2, v0206; GFX12-NEXT: global_load_b32 v0, v0, s[2:3] offset:-128207; GFX12-NEXT: v_add_co_u32 v2, s[0:1], s2, v2208; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)209; GFX12-NEXT: v_add_co_ci_u32_e64 v3, null, s3, 0, s[0:1]210; GFX12-NEXT: s_mov_b64 s[0:1], 0211; GFX12-NEXT: .LBB1_1: ; %atomicrmw.start212; GFX12-NEXT: ; =>This Inner Loop Header: Depth=1213; GFX12-NEXT: s_wait_loadcnt 0x0214; GFX12-NEXT: v_mov_b32_e32 v5, v0215; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)216; GFX12-NEXT: v_max_i32_e32 v4, v5, v1217; GFX12-NEXT: global_wb scope:SCOPE_SYS218; GFX12-NEXT: s_wait_storecnt 0x0219; GFX12-NEXT: global_atomic_cmpswap_b32 v0, v[2:3], v[4:5], off offset:-128 th:TH_ATOMIC_RETURN scope:SCOPE_SYS220; GFX12-NEXT: s_wait_loadcnt 0x0221; GFX12-NEXT: global_inv scope:SCOPE_SYS222; GFX12-NEXT: v_cmp_eq_u32_e32 vcc, v0, v5223; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)224; GFX12-NEXT: s_or_b64 s[0:1], vcc, s[0:1]225; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)226; GFX12-NEXT: s_and_not1_b64 exec, exec, s[0:1]227; GFX12-NEXT: s_cbranch_execnz .LBB1_1228; GFX12-NEXT: ; %bb.2: ; %atomicrmw.end229; GFX12-NEXT: s_or_b64 exec, exec, s[0:1]230; GFX12-NEXT: s_wait_loadcnt 0x0231; GFX12-NEXT: ; return to shader part epilog232 %zext.offset = zext i32 %voffset to i64233 %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset234 %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -128235 %rtn = atomicrmw max ptr addrspace(1) %gep1, i32 %data seq_cst236 %cast.rtn = bitcast i32 %rtn to float237 ret float %cast.rtn238}239 240define amdgpu_ps void @global_max_saddr_i32_nortn(ptr addrspace(1) inreg %sbase, i32 %voffset, i32 %data) {241; GFX9-LABEL: global_max_saddr_i32_nortn:242; GFX9: ; %bb.0:243; GFX9-NEXT: global_load_dword v5, v0, s[2:3]244; GFX9-NEXT: v_mov_b32_e32 v3, s3245; GFX9-NEXT: v_add_co_u32_e32 v2, vcc, s2, v0246; GFX9-NEXT: v_addc_co_u32_e32 v3, vcc, 0, v3, vcc247; GFX9-NEXT: s_mov_b64 s[0:1], 0248; GFX9-NEXT: .LBB2_1: ; %atomicrmw.start249; GFX9-NEXT: ; =>This Inner Loop Header: Depth=1250; GFX9-NEXT: s_waitcnt vmcnt(0)251; GFX9-NEXT: v_max_i32_e32 v4, v5, v1252; GFX9-NEXT: global_atomic_cmpswap v0, v[2:3], v[4:5], off glc253; GFX9-NEXT: s_waitcnt vmcnt(0)254; GFX9-NEXT: buffer_wbinvl1255; GFX9-NEXT: v_cmp_eq_u32_e32 vcc, v0, v5256; GFX9-NEXT: s_or_b64 s[0:1], vcc, s[0:1]257; GFX9-NEXT: v_mov_b32_e32 v5, v0258; GFX9-NEXT: s_andn2_b64 exec, exec, s[0:1]259; GFX9-NEXT: s_cbranch_execnz .LBB2_1260; GFX9-NEXT: ; %bb.2: ; %atomicrmw.end261; GFX9-NEXT: s_endpgm262;263; GFX10-LABEL: global_max_saddr_i32_nortn:264; GFX10: ; %bb.0:265; GFX10-NEXT: global_load_dword v5, v0, s[2:3]266; GFX10-NEXT: v_add_co_u32 v2, s[0:1], s2, v0267; GFX10-NEXT: v_add_co_ci_u32_e64 v3, s[0:1], s3, 0, s[0:1]268; GFX10-NEXT: s_mov_b64 s[0:1], 0269; GFX10-NEXT: .LBB2_1: ; %atomicrmw.start270; GFX10-NEXT: ; =>This Inner Loop Header: Depth=1271; GFX10-NEXT: s_waitcnt vmcnt(0)272; GFX10-NEXT: v_max_i32_e32 v4, v5, v1273; GFX10-NEXT: global_atomic_cmpswap v0, v[2:3], v[4:5], off glc274; GFX10-NEXT: s_waitcnt vmcnt(0)275; GFX10-NEXT: buffer_gl1_inv276; GFX10-NEXT: buffer_gl0_inv277; GFX10-NEXT: v_cmp_eq_u32_e32 vcc, v0, v5278; GFX10-NEXT: v_mov_b32_e32 v5, v0279; GFX10-NEXT: s_or_b64 s[0:1], vcc, s[0:1]280; GFX10-NEXT: s_andn2_b64 exec, exec, s[0:1]281; GFX10-NEXT: s_cbranch_execnz .LBB2_1282; GFX10-NEXT: ; %bb.2: ; %atomicrmw.end283; GFX10-NEXT: s_endpgm284;285; GFX11-LABEL: global_max_saddr_i32_nortn:286; GFX11: ; %bb.0:287; GFX11-NEXT: global_load_b32 v5, v0, s[2:3]288; GFX11-NEXT: v_add_co_u32 v2, s[0:1], s2, v0289; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)290; GFX11-NEXT: v_add_co_ci_u32_e64 v3, null, s3, 0, s[0:1]291; GFX11-NEXT: s_mov_b64 s[0:1], 0292; GFX11-NEXT: s_waitcnt_depctr depctr_sa_sdst(0)293; GFX11-NEXT: .LBB2_1: ; %atomicrmw.start294; GFX11-NEXT: ; =>This Inner Loop Header: Depth=1295; GFX11-NEXT: s_waitcnt vmcnt(0)296; GFX11-NEXT: v_max_i32_e32 v4, v5, v1297; GFX11-NEXT: global_atomic_cmpswap_b32 v0, v[2:3], v[4:5], off glc298; GFX11-NEXT: s_waitcnt vmcnt(0)299; GFX11-NEXT: buffer_gl1_inv300; GFX11-NEXT: buffer_gl0_inv301; GFX11-NEXT: v_cmp_eq_u32_e32 vcc, v0, v5302; GFX11-NEXT: v_mov_b32_e32 v5, v0303; GFX11-NEXT: s_or_b64 s[0:1], vcc, s[0:1]304; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)305; GFX11-NEXT: s_and_not1_b64 exec, exec, s[0:1]306; GFX11-NEXT: s_cbranch_execnz .LBB2_1307; GFX11-NEXT: ; %bb.2: ; %atomicrmw.end308; GFX11-NEXT: s_endpgm309;310; GFX12-LABEL: global_max_saddr_i32_nortn:311; GFX12: ; %bb.0:312; GFX12-NEXT: global_load_b32 v5, v0, s[2:3]313; GFX12-NEXT: v_add_co_u32 v2, s[0:1], s2, v0314; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)315; GFX12-NEXT: v_add_co_ci_u32_e64 v3, null, s3, 0, s[0:1]316; GFX12-NEXT: s_mov_b64 s[0:1], 0317; GFX12-NEXT: .LBB2_1: ; %atomicrmw.start318; GFX12-NEXT: ; =>This Inner Loop Header: Depth=1319; GFX12-NEXT: s_wait_loadcnt 0x0320; GFX12-NEXT: v_max_i32_e32 v4, v5, v1321; GFX12-NEXT: global_wb scope:SCOPE_SYS322; GFX12-NEXT: s_wait_storecnt 0x0323; GFX12-NEXT: global_atomic_cmpswap_b32 v0, v[2:3], v[4:5], off th:TH_ATOMIC_RETURN scope:SCOPE_SYS324; GFX12-NEXT: s_wait_loadcnt 0x0325; GFX12-NEXT: global_inv scope:SCOPE_SYS326; GFX12-NEXT: v_cmp_eq_u32_e32 vcc, v0, v5327; GFX12-NEXT: v_mov_b32_e32 v5, v0328; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)329; GFX12-NEXT: s_or_b64 s[0:1], vcc, s[0:1]330; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)331; GFX12-NEXT: s_and_not1_b64 exec, exec, s[0:1]332; GFX12-NEXT: s_cbranch_execnz .LBB2_1333; GFX12-NEXT: ; %bb.2: ; %atomicrmw.end334; GFX12-NEXT: s_endpgm335 %zext.offset = zext i32 %voffset to i64336 %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset337 %unused = atomicrmw max ptr addrspace(1) %gep0, i32 %data seq_cst338 ret void339}340 341define amdgpu_ps void @global_max_saddr_i32_nortn_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, i32 %data) {342; GFX9-LABEL: global_max_saddr_i32_nortn_neg128:343; GFX9: ; %bb.0:344; GFX9-NEXT: global_load_dword v5, v0, s[2:3] offset:-128345; GFX9-NEXT: v_mov_b32_e32 v3, s3346; GFX9-NEXT: v_add_co_u32_e32 v2, vcc, s2, v0347; GFX9-NEXT: v_addc_co_u32_e32 v3, vcc, 0, v3, vcc348; GFX9-NEXT: s_mov_b64 s[0:1], 0349; GFX9-NEXT: .LBB3_1: ; %atomicrmw.start350; GFX9-NEXT: ; =>This Inner Loop Header: Depth=1351; GFX9-NEXT: s_waitcnt vmcnt(0)352; GFX9-NEXT: v_max_i32_e32 v4, v5, v1353; GFX9-NEXT: global_atomic_cmpswap v0, v[2:3], v[4:5], off offset:-128 glc354; GFX9-NEXT: s_waitcnt vmcnt(0)355; GFX9-NEXT: buffer_wbinvl1356; GFX9-NEXT: v_cmp_eq_u32_e32 vcc, v0, v5357; GFX9-NEXT: s_or_b64 s[0:1], vcc, s[0:1]358; GFX9-NEXT: v_mov_b32_e32 v5, v0359; GFX9-NEXT: s_andn2_b64 exec, exec, s[0:1]360; GFX9-NEXT: s_cbranch_execnz .LBB3_1361; GFX9-NEXT: ; %bb.2: ; %atomicrmw.end362; GFX9-NEXT: s_endpgm363;364; GFX10-LABEL: global_max_saddr_i32_nortn_neg128:365; GFX10: ; %bb.0:366; GFX10-NEXT: global_load_dword v5, v0, s[2:3] offset:-128367; GFX10-NEXT: v_add_co_u32 v2, s[0:1], s2, v0368; GFX10-NEXT: v_add_co_ci_u32_e64 v3, s[0:1], s3, 0, s[0:1]369; GFX10-NEXT: s_mov_b64 s[0:1], 0370; GFX10-NEXT: .LBB3_1: ; %atomicrmw.start371; GFX10-NEXT: ; =>This Inner Loop Header: Depth=1372; GFX10-NEXT: s_waitcnt vmcnt(0)373; GFX10-NEXT: v_max_i32_e32 v4, v5, v1374; GFX10-NEXT: global_atomic_cmpswap v0, v[2:3], v[4:5], off offset:-128 glc375; GFX10-NEXT: s_waitcnt vmcnt(0)376; GFX10-NEXT: buffer_gl1_inv377; GFX10-NEXT: buffer_gl0_inv378; GFX10-NEXT: v_cmp_eq_u32_e32 vcc, v0, v5379; GFX10-NEXT: v_mov_b32_e32 v5, v0380; GFX10-NEXT: s_or_b64 s[0:1], vcc, s[0:1]381; GFX10-NEXT: s_andn2_b64 exec, exec, s[0:1]382; GFX10-NEXT: s_cbranch_execnz .LBB3_1383; GFX10-NEXT: ; %bb.2: ; %atomicrmw.end384; GFX10-NEXT: s_endpgm385;386; GFX11-LABEL: global_max_saddr_i32_nortn_neg128:387; GFX11: ; %bb.0:388; GFX11-NEXT: global_load_b32 v5, v0, s[2:3] offset:-128389; GFX11-NEXT: v_add_co_u32 v2, s[0:1], s2, v0390; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)391; GFX11-NEXT: v_add_co_ci_u32_e64 v3, null, s3, 0, s[0:1]392; GFX11-NEXT: s_mov_b64 s[0:1], 0393; GFX11-NEXT: s_waitcnt_depctr depctr_sa_sdst(0)394; GFX11-NEXT: .LBB3_1: ; %atomicrmw.start395; GFX11-NEXT: ; =>This Inner Loop Header: Depth=1396; GFX11-NEXT: s_waitcnt vmcnt(0)397; GFX11-NEXT: v_max_i32_e32 v4, v5, v1398; GFX11-NEXT: global_atomic_cmpswap_b32 v0, v[2:3], v[4:5], off offset:-128 glc399; GFX11-NEXT: s_waitcnt vmcnt(0)400; GFX11-NEXT: buffer_gl1_inv401; GFX11-NEXT: buffer_gl0_inv402; GFX11-NEXT: v_cmp_eq_u32_e32 vcc, v0, v5403; GFX11-NEXT: v_mov_b32_e32 v5, v0404; GFX11-NEXT: s_or_b64 s[0:1], vcc, s[0:1]405; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)406; GFX11-NEXT: s_and_not1_b64 exec, exec, s[0:1]407; GFX11-NEXT: s_cbranch_execnz .LBB3_1408; GFX11-NEXT: ; %bb.2: ; %atomicrmw.end409; GFX11-NEXT: s_endpgm410;411; GFX12-LABEL: global_max_saddr_i32_nortn_neg128:412; GFX12: ; %bb.0:413; GFX12-NEXT: global_load_b32 v5, v0, s[2:3] offset:-128414; GFX12-NEXT: v_add_co_u32 v2, s[0:1], s2, v0415; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)416; GFX12-NEXT: v_add_co_ci_u32_e64 v3, null, s3, 0, s[0:1]417; GFX12-NEXT: s_mov_b64 s[0:1], 0418; GFX12-NEXT: .LBB3_1: ; %atomicrmw.start419; GFX12-NEXT: ; =>This Inner Loop Header: Depth=1420; GFX12-NEXT: s_wait_loadcnt 0x0421; GFX12-NEXT: v_max_i32_e32 v4, v5, v1422; GFX12-NEXT: global_wb scope:SCOPE_SYS423; GFX12-NEXT: s_wait_storecnt 0x0424; GFX12-NEXT: global_atomic_cmpswap_b32 v0, v[2:3], v[4:5], off offset:-128 th:TH_ATOMIC_RETURN scope:SCOPE_SYS425; GFX12-NEXT: s_wait_loadcnt 0x0426; GFX12-NEXT: global_inv scope:SCOPE_SYS427; GFX12-NEXT: v_cmp_eq_u32_e32 vcc, v0, v5428; GFX12-NEXT: v_mov_b32_e32 v5, v0429; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)430; GFX12-NEXT: s_or_b64 s[0:1], vcc, s[0:1]431; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)432; GFX12-NEXT: s_and_not1_b64 exec, exec, s[0:1]433; GFX12-NEXT: s_cbranch_execnz .LBB3_1434; GFX12-NEXT: ; %bb.2: ; %atomicrmw.end435; GFX12-NEXT: s_endpgm436 %zext.offset = zext i32 %voffset to i64437 %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset438 %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -128439 %unused = atomicrmw max ptr addrspace(1) %gep1, i32 %data seq_cst440 ret void441}442 443define amdgpu_ps <2 x float> @global_max_saddr_i64_rtn(ptr addrspace(1) inreg %sbase, i32 %voffset, i64 %data) {444; GFX9-LABEL: global_max_saddr_i64_rtn:445; GFX9: ; %bb.0:446; GFX9-NEXT: global_load_dwordx2 v[3:4], v0, s[2:3]447; GFX9-NEXT: v_mov_b32_e32 v6, s3448; GFX9-NEXT: v_add_co_u32_e32 v5, vcc, s2, v0449; GFX9-NEXT: v_addc_co_u32_e32 v6, vcc, 0, v6, vcc450; GFX9-NEXT: s_mov_b64 s[0:1], 0451; GFX9-NEXT: .LBB4_1: ; %atomicrmw.start452; GFX9-NEXT: ; =>This Inner Loop Header: Depth=1453; GFX9-NEXT: s_waitcnt vmcnt(0)454; GFX9-NEXT: v_mov_b32_e32 v10, v4455; GFX9-NEXT: v_mov_b32_e32 v9, v3456; GFX9-NEXT: v_cmp_gt_i64_e32 vcc, v[9:10], v[1:2]457; GFX9-NEXT: v_cndmask_b32_e32 v8, v2, v10, vcc458; GFX9-NEXT: v_cndmask_b32_e32 v7, v1, v9, vcc459; GFX9-NEXT: global_atomic_cmpswap_x2 v[3:4], v[5:6], v[7:10], off glc460; GFX9-NEXT: s_waitcnt vmcnt(0)461; GFX9-NEXT: buffer_wbinvl1462; GFX9-NEXT: v_cmp_eq_u64_e32 vcc, v[3:4], v[9:10]463; GFX9-NEXT: s_or_b64 s[0:1], vcc, s[0:1]464; GFX9-NEXT: s_andn2_b64 exec, exec, s[0:1]465; GFX9-NEXT: s_cbranch_execnz .LBB4_1466; GFX9-NEXT: ; %bb.2: ; %atomicrmw.end467; GFX9-NEXT: s_or_b64 exec, exec, s[0:1]468; GFX9-NEXT: v_mov_b32_e32 v0, v3469; GFX9-NEXT: v_mov_b32_e32 v1, v4470; GFX9-NEXT: ; return to shader part epilog471;472; GFX10-LABEL: global_max_saddr_i64_rtn:473; GFX10: ; %bb.0:474; GFX10-NEXT: global_load_dwordx2 v[3:4], v0, s[2:3]475; GFX10-NEXT: v_add_co_u32 v5, s[0:1], s2, v0476; GFX10-NEXT: v_add_co_ci_u32_e64 v6, s[0:1], s3, 0, s[0:1]477; GFX10-NEXT: s_mov_b64 s[0:1], 0478; GFX10-NEXT: .LBB4_1: ; %atomicrmw.start479; GFX10-NEXT: ; =>This Inner Loop Header: Depth=1480; GFX10-NEXT: s_waitcnt vmcnt(0)481; GFX10-NEXT: v_mov_b32_e32 v10, v4482; GFX10-NEXT: v_mov_b32_e32 v9, v3483; GFX10-NEXT: v_cmp_gt_i64_e32 vcc, v[9:10], v[1:2]484; GFX10-NEXT: v_cndmask_b32_e32 v8, v2, v10, vcc485; GFX10-NEXT: v_cndmask_b32_e32 v7, v1, v9, vcc486; GFX10-NEXT: global_atomic_cmpswap_x2 v[3:4], v[5:6], v[7:10], off glc487; GFX10-NEXT: s_waitcnt vmcnt(0)488; GFX10-NEXT: buffer_gl1_inv489; GFX10-NEXT: buffer_gl0_inv490; GFX10-NEXT: v_cmp_eq_u64_e32 vcc, v[3:4], v[9:10]491; GFX10-NEXT: s_or_b64 s[0:1], vcc, s[0:1]492; GFX10-NEXT: s_andn2_b64 exec, exec, s[0:1]493; GFX10-NEXT: s_cbranch_execnz .LBB4_1494; GFX10-NEXT: ; %bb.2: ; %atomicrmw.end495; GFX10-NEXT: s_or_b64 exec, exec, s[0:1]496; GFX10-NEXT: v_mov_b32_e32 v0, v3497; GFX10-NEXT: v_mov_b32_e32 v1, v4498; GFX10-NEXT: ; return to shader part epilog499;500; GFX11-LABEL: global_max_saddr_i64_rtn:501; GFX11: ; %bb.0:502; GFX11-NEXT: global_load_b64 v[3:4], v0, s[2:3]503; GFX11-NEXT: v_add_co_u32 v5, s[0:1], s2, v0504; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)505; GFX11-NEXT: v_add_co_ci_u32_e64 v6, null, s3, 0, s[0:1]506; GFX11-NEXT: s_mov_b64 s[0:1], 0507; GFX11-NEXT: s_waitcnt_depctr depctr_sa_sdst(0)508; GFX11-NEXT: .LBB4_1: ; %atomicrmw.start509; GFX11-NEXT: ; =>This Inner Loop Header: Depth=1510; GFX11-NEXT: s_waitcnt vmcnt(0)511; GFX11-NEXT: v_mov_b32_e32 v10, v4512; GFX11-NEXT: v_mov_b32_e32 v9, v3513; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)514; GFX11-NEXT: v_cmp_gt_i64_e32 vcc, v[9:10], v[1:2]515; GFX11-NEXT: v_cndmask_b32_e32 v8, v2, v10, vcc516; GFX11-NEXT: v_cndmask_b32_e32 v7, v1, v9, vcc517; GFX11-NEXT: global_atomic_cmpswap_b64 v[3:4], v[5:6], v[7:10], off glc518; GFX11-NEXT: s_waitcnt vmcnt(0)519; GFX11-NEXT: buffer_gl1_inv520; GFX11-NEXT: buffer_gl0_inv521; GFX11-NEXT: v_cmp_eq_u64_e32 vcc, v[3:4], v[9:10]522; GFX11-NEXT: s_waitcnt_depctr depctr_va_vcc(0)523; GFX11-NEXT: s_or_b64 s[0:1], vcc, s[0:1]524; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)525; GFX11-NEXT: s_and_not1_b64 exec, exec, s[0:1]526; GFX11-NEXT: s_cbranch_execnz .LBB4_1527; GFX11-NEXT: ; %bb.2: ; %atomicrmw.end528; GFX11-NEXT: s_or_b64 exec, exec, s[0:1]529; GFX11-NEXT: v_mov_b32_e32 v0, v3530; GFX11-NEXT: v_mov_b32_e32 v1, v4531; GFX11-NEXT: ; return to shader part epilog532;533; GFX12-LABEL: global_max_saddr_i64_rtn:534; GFX12: ; %bb.0:535; GFX12-NEXT: global_load_b64 v[3:4], v0, s[2:3]536; GFX12-NEXT: v_add_co_u32 v5, s[0:1], s2, v0537; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)538; GFX12-NEXT: v_add_co_ci_u32_e64 v6, null, s3, 0, s[0:1]539; GFX12-NEXT: s_mov_b64 s[0:1], 0540; GFX12-NEXT: .LBB4_1: ; %atomicrmw.start541; GFX12-NEXT: ; =>This Inner Loop Header: Depth=1542; GFX12-NEXT: s_wait_loadcnt 0x0543; GFX12-NEXT: v_mov_b32_e32 v10, v4544; GFX12-NEXT: v_mov_b32_e32 v9, v3545; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)546; GFX12-NEXT: v_cmp_gt_i64_e32 vcc, v[9:10], v[1:2]547; GFX12-NEXT: s_wait_alu depctr_va_vcc(0)548; GFX12-NEXT: v_cndmask_b32_e32 v8, v2, v10, vcc549; GFX12-NEXT: v_cndmask_b32_e32 v7, v1, v9, vcc550; GFX12-NEXT: global_wb scope:SCOPE_SYS551; GFX12-NEXT: s_wait_storecnt 0x0552; GFX12-NEXT: global_atomic_cmpswap_b64 v[3:4], v[5:6], v[7:10], off th:TH_ATOMIC_RETURN scope:SCOPE_SYS553; GFX12-NEXT: s_wait_loadcnt 0x0554; GFX12-NEXT: global_inv scope:SCOPE_SYS555; GFX12-NEXT: v_cmp_eq_u64_e32 vcc, v[3:4], v[9:10]556; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)557; GFX12-NEXT: s_or_b64 s[0:1], vcc, s[0:1]558; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)559; GFX12-NEXT: s_and_not1_b64 exec, exec, s[0:1]560; GFX12-NEXT: s_cbranch_execnz .LBB4_1561; GFX12-NEXT: ; %bb.2: ; %atomicrmw.end562; GFX12-NEXT: s_or_b64 exec, exec, s[0:1]563; GFX12-NEXT: v_mov_b32_e32 v0, v3564; GFX12-NEXT: v_mov_b32_e32 v1, v4565; GFX12-NEXT: s_wait_loadcnt 0x0566; GFX12-NEXT: ; return to shader part epilog567 %zext.offset = zext i32 %voffset to i64568 %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset569 %rtn = atomicrmw max ptr addrspace(1) %gep0, i64 %data seq_cst570 %cast.rtn = bitcast i64 %rtn to <2 x float>571 ret <2 x float> %cast.rtn572}573 574define amdgpu_ps <2 x float> @global_max_saddr_i64_rtn_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, i64 %data) {575; GFX9-LABEL: global_max_saddr_i64_rtn_neg128:576; GFX9: ; %bb.0:577; GFX9-NEXT: global_load_dwordx2 v[3:4], v0, s[2:3] offset:-128578; GFX9-NEXT: v_mov_b32_e32 v6, s3579; GFX9-NEXT: v_add_co_u32_e32 v5, vcc, s2, v0580; GFX9-NEXT: v_addc_co_u32_e32 v6, vcc, 0, v6, vcc581; GFX9-NEXT: s_mov_b64 s[0:1], 0582; GFX9-NEXT: .LBB5_1: ; %atomicrmw.start583; GFX9-NEXT: ; =>This Inner Loop Header: Depth=1584; GFX9-NEXT: s_waitcnt vmcnt(0)585; GFX9-NEXT: v_mov_b32_e32 v10, v4586; GFX9-NEXT: v_mov_b32_e32 v9, v3587; GFX9-NEXT: v_cmp_gt_i64_e32 vcc, v[9:10], v[1:2]588; GFX9-NEXT: v_cndmask_b32_e32 v8, v2, v10, vcc589; GFX9-NEXT: v_cndmask_b32_e32 v7, v1, v9, vcc590; GFX9-NEXT: global_atomic_cmpswap_x2 v[3:4], v[5:6], v[7:10], off offset:-128 glc591; GFX9-NEXT: s_waitcnt vmcnt(0)592; GFX9-NEXT: buffer_wbinvl1593; GFX9-NEXT: v_cmp_eq_u64_e32 vcc, v[3:4], v[9:10]594; GFX9-NEXT: s_or_b64 s[0:1], vcc, s[0:1]595; GFX9-NEXT: s_andn2_b64 exec, exec, s[0:1]596; GFX9-NEXT: s_cbranch_execnz .LBB5_1597; GFX9-NEXT: ; %bb.2: ; %atomicrmw.end598; GFX9-NEXT: s_or_b64 exec, exec, s[0:1]599; GFX9-NEXT: v_mov_b32_e32 v0, v3600; GFX9-NEXT: v_mov_b32_e32 v1, v4601; GFX9-NEXT: ; return to shader part epilog602;603; GFX10-LABEL: global_max_saddr_i64_rtn_neg128:604; GFX10: ; %bb.0:605; GFX10-NEXT: global_load_dwordx2 v[3:4], v0, s[2:3] offset:-128606; GFX10-NEXT: v_add_co_u32 v5, s[0:1], s2, v0607; GFX10-NEXT: v_add_co_ci_u32_e64 v6, s[0:1], s3, 0, s[0:1]608; GFX10-NEXT: s_mov_b64 s[0:1], 0609; GFX10-NEXT: .LBB5_1: ; %atomicrmw.start610; GFX10-NEXT: ; =>This Inner Loop Header: Depth=1611; GFX10-NEXT: s_waitcnt vmcnt(0)612; GFX10-NEXT: v_mov_b32_e32 v10, v4613; GFX10-NEXT: v_mov_b32_e32 v9, v3614; GFX10-NEXT: v_cmp_gt_i64_e32 vcc, v[9:10], v[1:2]615; GFX10-NEXT: v_cndmask_b32_e32 v8, v2, v10, vcc616; GFX10-NEXT: v_cndmask_b32_e32 v7, v1, v9, vcc617; GFX10-NEXT: global_atomic_cmpswap_x2 v[3:4], v[5:6], v[7:10], off offset:-128 glc618; GFX10-NEXT: s_waitcnt vmcnt(0)619; GFX10-NEXT: buffer_gl1_inv620; GFX10-NEXT: buffer_gl0_inv621; GFX10-NEXT: v_cmp_eq_u64_e32 vcc, v[3:4], v[9:10]622; GFX10-NEXT: s_or_b64 s[0:1], vcc, s[0:1]623; GFX10-NEXT: s_andn2_b64 exec, exec, s[0:1]624; GFX10-NEXT: s_cbranch_execnz .LBB5_1625; GFX10-NEXT: ; %bb.2: ; %atomicrmw.end626; GFX10-NEXT: s_or_b64 exec, exec, s[0:1]627; GFX10-NEXT: v_mov_b32_e32 v0, v3628; GFX10-NEXT: v_mov_b32_e32 v1, v4629; GFX10-NEXT: ; return to shader part epilog630;631; GFX11-LABEL: global_max_saddr_i64_rtn_neg128:632; GFX11: ; %bb.0:633; GFX11-NEXT: global_load_b64 v[3:4], v0, s[2:3] offset:-128634; GFX11-NEXT: v_add_co_u32 v5, s[0:1], s2, v0635; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)636; GFX11-NEXT: v_add_co_ci_u32_e64 v6, null, s3, 0, s[0:1]637; GFX11-NEXT: s_mov_b64 s[0:1], 0638; GFX11-NEXT: s_waitcnt_depctr depctr_sa_sdst(0)639; GFX11-NEXT: .LBB5_1: ; %atomicrmw.start640; GFX11-NEXT: ; =>This Inner Loop Header: Depth=1641; GFX11-NEXT: s_waitcnt vmcnt(0)642; GFX11-NEXT: v_mov_b32_e32 v10, v4643; GFX11-NEXT: v_mov_b32_e32 v9, v3644; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)645; GFX11-NEXT: v_cmp_gt_i64_e32 vcc, v[9:10], v[1:2]646; GFX11-NEXT: v_cndmask_b32_e32 v8, v2, v10, vcc647; GFX11-NEXT: v_cndmask_b32_e32 v7, v1, v9, vcc648; GFX11-NEXT: global_atomic_cmpswap_b64 v[3:4], v[5:6], v[7:10], off offset:-128 glc649; GFX11-NEXT: s_waitcnt vmcnt(0)650; GFX11-NEXT: buffer_gl1_inv651; GFX11-NEXT: buffer_gl0_inv652; GFX11-NEXT: v_cmp_eq_u64_e32 vcc, v[3:4], v[9:10]653; GFX11-NEXT: s_waitcnt_depctr depctr_va_vcc(0)654; GFX11-NEXT: s_or_b64 s[0:1], vcc, s[0:1]655; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)656; GFX11-NEXT: s_and_not1_b64 exec, exec, s[0:1]657; GFX11-NEXT: s_cbranch_execnz .LBB5_1658; GFX11-NEXT: ; %bb.2: ; %atomicrmw.end659; GFX11-NEXT: s_or_b64 exec, exec, s[0:1]660; GFX11-NEXT: v_mov_b32_e32 v0, v3661; GFX11-NEXT: v_mov_b32_e32 v1, v4662; GFX11-NEXT: ; return to shader part epilog663;664; GFX12-LABEL: global_max_saddr_i64_rtn_neg128:665; GFX12: ; %bb.0:666; GFX12-NEXT: global_load_b64 v[3:4], v0, s[2:3] offset:-128667; GFX12-NEXT: v_add_co_u32 v5, s[0:1], s2, v0668; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)669; GFX12-NEXT: v_add_co_ci_u32_e64 v6, null, s3, 0, s[0:1]670; GFX12-NEXT: s_mov_b64 s[0:1], 0671; GFX12-NEXT: .LBB5_1: ; %atomicrmw.start672; GFX12-NEXT: ; =>This Inner Loop Header: Depth=1673; GFX12-NEXT: s_wait_loadcnt 0x0674; GFX12-NEXT: v_mov_b32_e32 v10, v4675; GFX12-NEXT: v_mov_b32_e32 v9, v3676; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)677; GFX12-NEXT: v_cmp_gt_i64_e32 vcc, v[9:10], v[1:2]678; GFX12-NEXT: s_wait_alu depctr_va_vcc(0)679; GFX12-NEXT: v_cndmask_b32_e32 v8, v2, v10, vcc680; GFX12-NEXT: v_cndmask_b32_e32 v7, v1, v9, vcc681; GFX12-NEXT: global_wb scope:SCOPE_SYS682; GFX12-NEXT: s_wait_storecnt 0x0683; GFX12-NEXT: global_atomic_cmpswap_b64 v[3:4], v[5:6], v[7:10], off offset:-128 th:TH_ATOMIC_RETURN scope:SCOPE_SYS684; GFX12-NEXT: s_wait_loadcnt 0x0685; GFX12-NEXT: global_inv scope:SCOPE_SYS686; GFX12-NEXT: v_cmp_eq_u64_e32 vcc, v[3:4], v[9:10]687; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)688; GFX12-NEXT: s_or_b64 s[0:1], vcc, s[0:1]689; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)690; GFX12-NEXT: s_and_not1_b64 exec, exec, s[0:1]691; GFX12-NEXT: s_cbranch_execnz .LBB5_1692; GFX12-NEXT: ; %bb.2: ; %atomicrmw.end693; GFX12-NEXT: s_or_b64 exec, exec, s[0:1]694; GFX12-NEXT: v_mov_b32_e32 v0, v3695; GFX12-NEXT: v_mov_b32_e32 v1, v4696; GFX12-NEXT: s_wait_loadcnt 0x0697; GFX12-NEXT: ; return to shader part epilog698 %zext.offset = zext i32 %voffset to i64699 %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset700 %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -128701 %rtn = atomicrmw max ptr addrspace(1) %gep1, i64 %data seq_cst702 %cast.rtn = bitcast i64 %rtn to <2 x float>703 ret <2 x float> %cast.rtn704}705 706define amdgpu_ps void @global_max_saddr_i64_nortn(ptr addrspace(1) inreg %sbase, i32 %voffset, i64 %data) {707; GFX9-LABEL: global_max_saddr_i64_nortn:708; GFX9: ; %bb.0:709; GFX9-NEXT: global_load_dwordx2 v[5:6], v0, s[2:3]710; GFX9-NEXT: v_mov_b32_e32 v3, s3711; GFX9-NEXT: v_add_co_u32_e32 v7, vcc, s2, v0712; GFX9-NEXT: v_addc_co_u32_e32 v8, vcc, 0, v3, vcc713; GFX9-NEXT: s_mov_b64 s[0:1], 0714; GFX9-NEXT: .LBB6_1: ; %atomicrmw.start715; GFX9-NEXT: ; =>This Inner Loop Header: Depth=1716; GFX9-NEXT: s_waitcnt vmcnt(0)717; GFX9-NEXT: v_cmp_gt_i64_e32 vcc, v[5:6], v[1:2]718; GFX9-NEXT: v_cndmask_b32_e32 v4, v2, v6, vcc719; GFX9-NEXT: v_cndmask_b32_e32 v3, v1, v5, vcc720; GFX9-NEXT: global_atomic_cmpswap_x2 v[3:4], v[7:8], v[3:6], off glc721; GFX9-NEXT: s_waitcnt vmcnt(0)722; GFX9-NEXT: buffer_wbinvl1723; GFX9-NEXT: v_cmp_eq_u64_e32 vcc, v[3:4], v[5:6]724; GFX9-NEXT: v_mov_b32_e32 v6, v4725; GFX9-NEXT: s_or_b64 s[0:1], vcc, s[0:1]726; GFX9-NEXT: v_mov_b32_e32 v5, v3727; GFX9-NEXT: s_andn2_b64 exec, exec, s[0:1]728; GFX9-NEXT: s_cbranch_execnz .LBB6_1729; GFX9-NEXT: ; %bb.2: ; %atomicrmw.end730; GFX9-NEXT: s_endpgm731;732; GFX10-LABEL: global_max_saddr_i64_nortn:733; GFX10: ; %bb.0:734; GFX10-NEXT: global_load_dwordx2 v[5:6], v0, s[2:3]735; GFX10-NEXT: v_add_co_u32 v7, s[0:1], s2, v0736; GFX10-NEXT: v_add_co_ci_u32_e64 v8, s[0:1], s3, 0, s[0:1]737; GFX10-NEXT: s_mov_b64 s[0:1], 0738; GFX10-NEXT: .LBB6_1: ; %atomicrmw.start739; GFX10-NEXT: ; =>This Inner Loop Header: Depth=1740; GFX10-NEXT: s_waitcnt vmcnt(0)741; GFX10-NEXT: v_cmp_gt_i64_e32 vcc, v[5:6], v[1:2]742; GFX10-NEXT: v_cndmask_b32_e32 v4, v2, v6, vcc743; GFX10-NEXT: v_cndmask_b32_e32 v3, v1, v5, vcc744; GFX10-NEXT: global_atomic_cmpswap_x2 v[3:4], v[7:8], v[3:6], off glc745; GFX10-NEXT: s_waitcnt vmcnt(0)746; GFX10-NEXT: buffer_gl1_inv747; GFX10-NEXT: buffer_gl0_inv748; GFX10-NEXT: v_cmp_eq_u64_e32 vcc, v[3:4], v[5:6]749; GFX10-NEXT: v_mov_b32_e32 v6, v4750; GFX10-NEXT: v_mov_b32_e32 v5, v3751; GFX10-NEXT: s_or_b64 s[0:1], vcc, s[0:1]752; GFX10-NEXT: s_andn2_b64 exec, exec, s[0:1]753; GFX10-NEXT: s_cbranch_execnz .LBB6_1754; GFX10-NEXT: ; %bb.2: ; %atomicrmw.end755; GFX10-NEXT: s_endpgm756;757; GFX11-LABEL: global_max_saddr_i64_nortn:758; GFX11: ; %bb.0:759; GFX11-NEXT: global_load_b64 v[5:6], v0, s[2:3]760; GFX11-NEXT: v_add_co_u32 v7, s[0:1], s2, v0761; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)762; GFX11-NEXT: v_add_co_ci_u32_e64 v8, null, s3, 0, s[0:1]763; GFX11-NEXT: s_mov_b64 s[0:1], 0764; GFX11-NEXT: s_waitcnt_depctr depctr_sa_sdst(0)765; GFX11-NEXT: .LBB6_1: ; %atomicrmw.start766; GFX11-NEXT: ; =>This Inner Loop Header: Depth=1767; GFX11-NEXT: s_waitcnt vmcnt(0)768; GFX11-NEXT: v_cmp_gt_i64_e32 vcc, v[5:6], v[1:2]769; GFX11-NEXT: v_cndmask_b32_e32 v4, v2, v6, vcc770; GFX11-NEXT: v_cndmask_b32_e32 v3, v1, v5, vcc771; GFX11-NEXT: global_atomic_cmpswap_b64 v[3:4], v[7:8], v[3:6], off glc772; GFX11-NEXT: s_waitcnt vmcnt(0)773; GFX11-NEXT: buffer_gl1_inv774; GFX11-NEXT: buffer_gl0_inv775; GFX11-NEXT: v_cmp_eq_u64_e32 vcc, v[3:4], v[5:6]776; GFX11-NEXT: s_waitcnt_depctr depctr_va_vcc(0)777; GFX11-NEXT: v_mov_b32_e32 v6, v4778; GFX11-NEXT: v_mov_b32_e32 v5, v3779; GFX11-NEXT: s_or_b64 s[0:1], vcc, s[0:1]780; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)781; GFX11-NEXT: s_and_not1_b64 exec, exec, s[0:1]782; GFX11-NEXT: s_cbranch_execnz .LBB6_1783; GFX11-NEXT: ; %bb.2: ; %atomicrmw.end784; GFX11-NEXT: s_endpgm785;786; GFX12-LABEL: global_max_saddr_i64_nortn:787; GFX12: ; %bb.0:788; GFX12-NEXT: global_load_b64 v[5:6], v0, s[2:3]789; GFX12-NEXT: v_add_co_u32 v7, s[0:1], s2, v0790; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)791; GFX12-NEXT: v_add_co_ci_u32_e64 v8, null, s3, 0, s[0:1]792; GFX12-NEXT: s_mov_b64 s[0:1], 0793; GFX12-NEXT: .LBB6_1: ; %atomicrmw.start794; GFX12-NEXT: ; =>This Inner Loop Header: Depth=1795; GFX12-NEXT: s_wait_loadcnt 0x0796; GFX12-NEXT: v_cmp_gt_i64_e32 vcc, v[5:6], v[1:2]797; GFX12-NEXT: s_wait_alu depctr_va_vcc(0)798; GFX12-NEXT: v_cndmask_b32_e32 v4, v2, v6, vcc799; GFX12-NEXT: v_cndmask_b32_e32 v3, v1, v5, vcc800; GFX12-NEXT: global_wb scope:SCOPE_SYS801; GFX12-NEXT: s_wait_storecnt 0x0802; GFX12-NEXT: global_atomic_cmpswap_b64 v[3:4], v[7:8], v[3:6], off th:TH_ATOMIC_RETURN scope:SCOPE_SYS803; GFX12-NEXT: s_wait_loadcnt 0x0804; GFX12-NEXT: global_inv scope:SCOPE_SYS805; GFX12-NEXT: v_cmp_eq_u64_e32 vcc, v[3:4], v[5:6]806; GFX12-NEXT: v_mov_b32_e32 v6, v4807; GFX12-NEXT: v_mov_b32_e32 v5, v3808; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)809; GFX12-NEXT: s_or_b64 s[0:1], vcc, s[0:1]810; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)811; GFX12-NEXT: s_and_not1_b64 exec, exec, s[0:1]812; GFX12-NEXT: s_cbranch_execnz .LBB6_1813; GFX12-NEXT: ; %bb.2: ; %atomicrmw.end814; GFX12-NEXT: s_endpgm815 %zext.offset = zext i32 %voffset to i64816 %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset817 %unused = atomicrmw max ptr addrspace(1) %gep0, i64 %data seq_cst818 ret void819}820 821define amdgpu_ps void @global_max_saddr_i64_nortn_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, i64 %data) {822; GFX9-LABEL: global_max_saddr_i64_nortn_neg128:823; GFX9: ; %bb.0:824; GFX9-NEXT: global_load_dwordx2 v[5:6], v0, s[2:3] offset:-128825; GFX9-NEXT: v_mov_b32_e32 v3, s3826; GFX9-NEXT: v_add_co_u32_e32 v7, vcc, s2, v0827; GFX9-NEXT: v_addc_co_u32_e32 v8, vcc, 0, v3, vcc828; GFX9-NEXT: s_mov_b64 s[0:1], 0829; GFX9-NEXT: .LBB7_1: ; %atomicrmw.start830; GFX9-NEXT: ; =>This Inner Loop Header: Depth=1831; GFX9-NEXT: s_waitcnt vmcnt(0)832; GFX9-NEXT: v_cmp_gt_i64_e32 vcc, v[5:6], v[1:2]833; GFX9-NEXT: v_cndmask_b32_e32 v4, v2, v6, vcc834; GFX9-NEXT: v_cndmask_b32_e32 v3, v1, v5, vcc835; GFX9-NEXT: global_atomic_cmpswap_x2 v[3:4], v[7:8], v[3:6], off offset:-128 glc836; GFX9-NEXT: s_waitcnt vmcnt(0)837; GFX9-NEXT: buffer_wbinvl1838; GFX9-NEXT: v_cmp_eq_u64_e32 vcc, v[3:4], v[5:6]839; GFX9-NEXT: v_mov_b32_e32 v6, v4840; GFX9-NEXT: s_or_b64 s[0:1], vcc, s[0:1]841; GFX9-NEXT: v_mov_b32_e32 v5, v3842; GFX9-NEXT: s_andn2_b64 exec, exec, s[0:1]843; GFX9-NEXT: s_cbranch_execnz .LBB7_1844; GFX9-NEXT: ; %bb.2: ; %atomicrmw.end845; GFX9-NEXT: s_endpgm846;847; GFX10-LABEL: global_max_saddr_i64_nortn_neg128:848; GFX10: ; %bb.0:849; GFX10-NEXT: global_load_dwordx2 v[5:6], v0, s[2:3] offset:-128850; GFX10-NEXT: v_add_co_u32 v7, s[0:1], s2, v0851; GFX10-NEXT: v_add_co_ci_u32_e64 v8, s[0:1], s3, 0, s[0:1]852; GFX10-NEXT: s_mov_b64 s[0:1], 0853; GFX10-NEXT: .LBB7_1: ; %atomicrmw.start854; GFX10-NEXT: ; =>This Inner Loop Header: Depth=1855; GFX10-NEXT: s_waitcnt vmcnt(0)856; GFX10-NEXT: v_cmp_gt_i64_e32 vcc, v[5:6], v[1:2]857; GFX10-NEXT: v_cndmask_b32_e32 v4, v2, v6, vcc858; GFX10-NEXT: v_cndmask_b32_e32 v3, v1, v5, vcc859; GFX10-NEXT: global_atomic_cmpswap_x2 v[3:4], v[7:8], v[3:6], off offset:-128 glc860; GFX10-NEXT: s_waitcnt vmcnt(0)861; GFX10-NEXT: buffer_gl1_inv862; GFX10-NEXT: buffer_gl0_inv863; GFX10-NEXT: v_cmp_eq_u64_e32 vcc, v[3:4], v[5:6]864; GFX10-NEXT: v_mov_b32_e32 v6, v4865; GFX10-NEXT: v_mov_b32_e32 v5, v3866; GFX10-NEXT: s_or_b64 s[0:1], vcc, s[0:1]867; GFX10-NEXT: s_andn2_b64 exec, exec, s[0:1]868; GFX10-NEXT: s_cbranch_execnz .LBB7_1869; GFX10-NEXT: ; %bb.2: ; %atomicrmw.end870; GFX10-NEXT: s_endpgm871;872; GFX11-LABEL: global_max_saddr_i64_nortn_neg128:873; GFX11: ; %bb.0:874; GFX11-NEXT: global_load_b64 v[5:6], v0, s[2:3] offset:-128875; GFX11-NEXT: v_add_co_u32 v7, s[0:1], s2, v0876; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)877; GFX11-NEXT: v_add_co_ci_u32_e64 v8, null, s3, 0, s[0:1]878; GFX11-NEXT: s_mov_b64 s[0:1], 0879; GFX11-NEXT: s_waitcnt_depctr depctr_sa_sdst(0)880; GFX11-NEXT: .LBB7_1: ; %atomicrmw.start881; GFX11-NEXT: ; =>This Inner Loop Header: Depth=1882; GFX11-NEXT: s_waitcnt vmcnt(0)883; GFX11-NEXT: v_cmp_gt_i64_e32 vcc, v[5:6], v[1:2]884; GFX11-NEXT: v_cndmask_b32_e32 v4, v2, v6, vcc885; GFX11-NEXT: v_cndmask_b32_e32 v3, v1, v5, vcc886; GFX11-NEXT: global_atomic_cmpswap_b64 v[3:4], v[7:8], v[3:6], off offset:-128 glc887; GFX11-NEXT: s_waitcnt vmcnt(0)888; GFX11-NEXT: buffer_gl1_inv889; GFX11-NEXT: buffer_gl0_inv890; GFX11-NEXT: v_cmp_eq_u64_e32 vcc, v[3:4], v[5:6]891; GFX11-NEXT: s_waitcnt_depctr depctr_va_vcc(0)892; GFX11-NEXT: v_mov_b32_e32 v6, v4893; GFX11-NEXT: v_mov_b32_e32 v5, v3894; GFX11-NEXT: s_or_b64 s[0:1], vcc, s[0:1]895; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)896; GFX11-NEXT: s_and_not1_b64 exec, exec, s[0:1]897; GFX11-NEXT: s_cbranch_execnz .LBB7_1898; GFX11-NEXT: ; %bb.2: ; %atomicrmw.end899; GFX11-NEXT: s_endpgm900;901; GFX12-LABEL: global_max_saddr_i64_nortn_neg128:902; GFX12: ; %bb.0:903; GFX12-NEXT: global_load_b64 v[5:6], v0, s[2:3] offset:-128904; GFX12-NEXT: v_add_co_u32 v7, s[0:1], s2, v0905; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)906; GFX12-NEXT: v_add_co_ci_u32_e64 v8, null, s3, 0, s[0:1]907; GFX12-NEXT: s_mov_b64 s[0:1], 0908; GFX12-NEXT: .LBB7_1: ; %atomicrmw.start909; GFX12-NEXT: ; =>This Inner Loop Header: Depth=1910; GFX12-NEXT: s_wait_loadcnt 0x0911; GFX12-NEXT: v_cmp_gt_i64_e32 vcc, v[5:6], v[1:2]912; GFX12-NEXT: s_wait_alu depctr_va_vcc(0)913; GFX12-NEXT: v_cndmask_b32_e32 v4, v2, v6, vcc914; GFX12-NEXT: v_cndmask_b32_e32 v3, v1, v5, vcc915; GFX12-NEXT: global_wb scope:SCOPE_SYS916; GFX12-NEXT: s_wait_storecnt 0x0917; GFX12-NEXT: global_atomic_cmpswap_b64 v[3:4], v[7:8], v[3:6], off offset:-128 th:TH_ATOMIC_RETURN scope:SCOPE_SYS918; GFX12-NEXT: s_wait_loadcnt 0x0919; GFX12-NEXT: global_inv scope:SCOPE_SYS920; GFX12-NEXT: v_cmp_eq_u64_e32 vcc, v[3:4], v[5:6]921; GFX12-NEXT: v_mov_b32_e32 v6, v4922; GFX12-NEXT: v_mov_b32_e32 v5, v3923; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)924; GFX12-NEXT: s_or_b64 s[0:1], vcc, s[0:1]925; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)926; GFX12-NEXT: s_and_not1_b64 exec, exec, s[0:1]927; GFX12-NEXT: s_cbranch_execnz .LBB7_1928; GFX12-NEXT: ; %bb.2: ; %atomicrmw.end929; GFX12-NEXT: s_endpgm930 %zext.offset = zext i32 %voffset to i64931 %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset932 %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -128933 %unused = atomicrmw max ptr addrspace(1) %gep1, i64 %data seq_cst934 ret void935}936 937; --------------------------------------------------------------------------------938; atomicrmw min939; --------------------------------------------------------------------------------940 941define amdgpu_ps float @global_min_saddr_i32_rtn(ptr addrspace(1) inreg %sbase, i32 %voffset, i32 %data) {942; GFX9-LABEL: global_min_saddr_i32_rtn:943; GFX9: ; %bb.0:944; GFX9-NEXT: v_mov_b32_e32 v2, v0945; GFX9-NEXT: global_load_dword v0, v0, s[2:3]946; GFX9-NEXT: v_mov_b32_e32 v3, s3947; GFX9-NEXT: v_add_co_u32_e32 v2, vcc, s2, v2948; GFX9-NEXT: v_addc_co_u32_e32 v3, vcc, 0, v3, vcc949; GFX9-NEXT: s_mov_b64 s[0:1], 0950; GFX9-NEXT: .LBB8_1: ; %atomicrmw.start951; GFX9-NEXT: ; =>This Inner Loop Header: Depth=1952; GFX9-NEXT: s_waitcnt vmcnt(0)953; GFX9-NEXT: v_mov_b32_e32 v5, v0954; GFX9-NEXT: v_min_i32_e32 v4, v5, v1955; GFX9-NEXT: global_atomic_cmpswap v0, v[2:3], v[4:5], off glc956; GFX9-NEXT: s_waitcnt vmcnt(0)957; GFX9-NEXT: buffer_wbinvl1958; GFX9-NEXT: v_cmp_eq_u32_e32 vcc, v0, v5959; GFX9-NEXT: s_or_b64 s[0:1], vcc, s[0:1]960; GFX9-NEXT: s_andn2_b64 exec, exec, s[0:1]961; GFX9-NEXT: s_cbranch_execnz .LBB8_1962; GFX9-NEXT: ; %bb.2: ; %atomicrmw.end963; GFX9-NEXT: s_or_b64 exec, exec, s[0:1]964; GFX9-NEXT: ; return to shader part epilog965;966; GFX10-LABEL: global_min_saddr_i32_rtn:967; GFX10: ; %bb.0:968; GFX10-NEXT: v_mov_b32_e32 v2, v0969; GFX10-NEXT: global_load_dword v0, v0, s[2:3]970; GFX10-NEXT: v_add_co_u32 v2, s[0:1], s2, v2971; GFX10-NEXT: v_add_co_ci_u32_e64 v3, s[0:1], s3, 0, s[0:1]972; GFX10-NEXT: s_mov_b64 s[0:1], 0973; GFX10-NEXT: .LBB8_1: ; %atomicrmw.start974; GFX10-NEXT: ; =>This Inner Loop Header: Depth=1975; GFX10-NEXT: s_waitcnt vmcnt(0)976; GFX10-NEXT: v_mov_b32_e32 v5, v0977; GFX10-NEXT: v_min_i32_e32 v4, v5, v1978; GFX10-NEXT: global_atomic_cmpswap v0, v[2:3], v[4:5], off glc979; GFX10-NEXT: s_waitcnt vmcnt(0)980; GFX10-NEXT: buffer_gl1_inv981; GFX10-NEXT: buffer_gl0_inv982; GFX10-NEXT: v_cmp_eq_u32_e32 vcc, v0, v5983; GFX10-NEXT: s_or_b64 s[0:1], vcc, s[0:1]984; GFX10-NEXT: s_andn2_b64 exec, exec, s[0:1]985; GFX10-NEXT: s_cbranch_execnz .LBB8_1986; GFX10-NEXT: ; %bb.2: ; %atomicrmw.end987; GFX10-NEXT: s_or_b64 exec, exec, s[0:1]988; GFX10-NEXT: ; return to shader part epilog989;990; GFX11-LABEL: global_min_saddr_i32_rtn:991; GFX11: ; %bb.0:992; GFX11-NEXT: v_mov_b32_e32 v2, v0993; GFX11-NEXT: global_load_b32 v0, v0, s[2:3]994; GFX11-NEXT: v_add_co_u32 v2, s[0:1], s2, v2995; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)996; GFX11-NEXT: v_add_co_ci_u32_e64 v3, null, s3, 0, s[0:1]997; GFX11-NEXT: s_mov_b64 s[0:1], 0998; GFX11-NEXT: s_waitcnt_depctr depctr_sa_sdst(0)999; GFX11-NEXT: .LBB8_1: ; %atomicrmw.start1000; GFX11-NEXT: ; =>This Inner Loop Header: Depth=11001; GFX11-NEXT: s_waitcnt vmcnt(0)1002; GFX11-NEXT: v_mov_b32_e32 v5, v01003; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)1004; GFX11-NEXT: v_min_i32_e32 v4, v5, v11005; GFX11-NEXT: global_atomic_cmpswap_b32 v0, v[2:3], v[4:5], off glc1006; GFX11-NEXT: s_waitcnt vmcnt(0)1007; GFX11-NEXT: buffer_gl1_inv1008; GFX11-NEXT: buffer_gl0_inv1009; GFX11-NEXT: v_cmp_eq_u32_e32 vcc, v0, v51010; GFX11-NEXT: s_or_b64 s[0:1], vcc, s[0:1]1011; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)1012; GFX11-NEXT: s_and_not1_b64 exec, exec, s[0:1]1013; GFX11-NEXT: s_cbranch_execnz .LBB8_11014; GFX11-NEXT: ; %bb.2: ; %atomicrmw.end1015; GFX11-NEXT: s_or_b64 exec, exec, s[0:1]1016; GFX11-NEXT: ; return to shader part epilog1017;1018; GFX12-LABEL: global_min_saddr_i32_rtn:1019; GFX12: ; %bb.0:1020; GFX12-NEXT: v_mov_b32_e32 v2, v01021; GFX12-NEXT: global_load_b32 v0, v0, s[2:3]1022; GFX12-NEXT: v_add_co_u32 v2, s[0:1], s2, v21023; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)1024; GFX12-NEXT: v_add_co_ci_u32_e64 v3, null, s3, 0, s[0:1]1025; GFX12-NEXT: s_mov_b64 s[0:1], 01026; GFX12-NEXT: .LBB8_1: ; %atomicrmw.start1027; GFX12-NEXT: ; =>This Inner Loop Header: Depth=11028; GFX12-NEXT: s_wait_loadcnt 0x01029; GFX12-NEXT: v_mov_b32_e32 v5, v01030; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)1031; GFX12-NEXT: v_min_i32_e32 v4, v5, v11032; GFX12-NEXT: global_wb scope:SCOPE_SYS1033; GFX12-NEXT: s_wait_storecnt 0x01034; GFX12-NEXT: global_atomic_cmpswap_b32 v0, v[2:3], v[4:5], off th:TH_ATOMIC_RETURN scope:SCOPE_SYS1035; GFX12-NEXT: s_wait_loadcnt 0x01036; GFX12-NEXT: global_inv scope:SCOPE_SYS1037; GFX12-NEXT: v_cmp_eq_u32_e32 vcc, v0, v51038; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)1039; GFX12-NEXT: s_or_b64 s[0:1], vcc, s[0:1]1040; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)1041; GFX12-NEXT: s_and_not1_b64 exec, exec, s[0:1]1042; GFX12-NEXT: s_cbranch_execnz .LBB8_11043; GFX12-NEXT: ; %bb.2: ; %atomicrmw.end1044; GFX12-NEXT: s_or_b64 exec, exec, s[0:1]1045; GFX12-NEXT: s_wait_loadcnt 0x01046; GFX12-NEXT: ; return to shader part epilog1047 %zext.offset = zext i32 %voffset to i641048 %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset1049 %rtn = atomicrmw min ptr addrspace(1) %gep0, i32 %data seq_cst1050 %cast.rtn = bitcast i32 %rtn to float1051 ret float %cast.rtn1052}1053 1054define amdgpu_ps float @global_min_saddr_i32_rtn_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, i32 %data) {1055; GFX9-LABEL: global_min_saddr_i32_rtn_neg128:1056; GFX9: ; %bb.0:1057; GFX9-NEXT: v_mov_b32_e32 v2, v01058; GFX9-NEXT: global_load_dword v0, v0, s[2:3] offset:-1281059; GFX9-NEXT: v_mov_b32_e32 v3, s31060; GFX9-NEXT: v_add_co_u32_e32 v2, vcc, s2, v21061; GFX9-NEXT: v_addc_co_u32_e32 v3, vcc, 0, v3, vcc1062; GFX9-NEXT: s_mov_b64 s[0:1], 01063; GFX9-NEXT: .LBB9_1: ; %atomicrmw.start1064; GFX9-NEXT: ; =>This Inner Loop Header: Depth=11065; GFX9-NEXT: s_waitcnt vmcnt(0)1066; GFX9-NEXT: v_mov_b32_e32 v5, v01067; GFX9-NEXT: v_min_i32_e32 v4, v5, v11068; GFX9-NEXT: global_atomic_cmpswap v0, v[2:3], v[4:5], off offset:-128 glc1069; GFX9-NEXT: s_waitcnt vmcnt(0)1070; GFX9-NEXT: buffer_wbinvl11071; GFX9-NEXT: v_cmp_eq_u32_e32 vcc, v0, v51072; GFX9-NEXT: s_or_b64 s[0:1], vcc, s[0:1]1073; GFX9-NEXT: s_andn2_b64 exec, exec, s[0:1]1074; GFX9-NEXT: s_cbranch_execnz .LBB9_11075; GFX9-NEXT: ; %bb.2: ; %atomicrmw.end1076; GFX9-NEXT: s_or_b64 exec, exec, s[0:1]1077; GFX9-NEXT: ; return to shader part epilog1078;1079; GFX10-LABEL: global_min_saddr_i32_rtn_neg128:1080; GFX10: ; %bb.0:1081; GFX10-NEXT: v_mov_b32_e32 v2, v01082; GFX10-NEXT: global_load_dword v0, v0, s[2:3] offset:-1281083; GFX10-NEXT: v_add_co_u32 v2, s[0:1], s2, v21084; GFX10-NEXT: v_add_co_ci_u32_e64 v3, s[0:1], s3, 0, s[0:1]1085; GFX10-NEXT: s_mov_b64 s[0:1], 01086; GFX10-NEXT: .LBB9_1: ; %atomicrmw.start1087; GFX10-NEXT: ; =>This Inner Loop Header: Depth=11088; GFX10-NEXT: s_waitcnt vmcnt(0)1089; GFX10-NEXT: v_mov_b32_e32 v5, v01090; GFX10-NEXT: v_min_i32_e32 v4, v5, v11091; GFX10-NEXT: global_atomic_cmpswap v0, v[2:3], v[4:5], off offset:-128 glc1092; GFX10-NEXT: s_waitcnt vmcnt(0)1093; GFX10-NEXT: buffer_gl1_inv1094; GFX10-NEXT: buffer_gl0_inv1095; GFX10-NEXT: v_cmp_eq_u32_e32 vcc, v0, v51096; GFX10-NEXT: s_or_b64 s[0:1], vcc, s[0:1]1097; GFX10-NEXT: s_andn2_b64 exec, exec, s[0:1]1098; GFX10-NEXT: s_cbranch_execnz .LBB9_11099; GFX10-NEXT: ; %bb.2: ; %atomicrmw.end1100; GFX10-NEXT: s_or_b64 exec, exec, s[0:1]1101; GFX10-NEXT: ; return to shader part epilog1102;1103; GFX11-LABEL: global_min_saddr_i32_rtn_neg128:1104; GFX11: ; %bb.0:1105; GFX11-NEXT: v_mov_b32_e32 v2, v01106; GFX11-NEXT: global_load_b32 v0, v0, s[2:3] offset:-1281107; GFX11-NEXT: v_add_co_u32 v2, s[0:1], s2, v21108; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)1109; GFX11-NEXT: v_add_co_ci_u32_e64 v3, null, s3, 0, s[0:1]1110; GFX11-NEXT: s_mov_b64 s[0:1], 01111; GFX11-NEXT: s_waitcnt_depctr depctr_sa_sdst(0)1112; GFX11-NEXT: .LBB9_1: ; %atomicrmw.start1113; GFX11-NEXT: ; =>This Inner Loop Header: Depth=11114; GFX11-NEXT: s_waitcnt vmcnt(0)1115; GFX11-NEXT: v_mov_b32_e32 v5, v01116; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)1117; GFX11-NEXT: v_min_i32_e32 v4, v5, v11118; GFX11-NEXT: global_atomic_cmpswap_b32 v0, v[2:3], v[4:5], off offset:-128 glc1119; GFX11-NEXT: s_waitcnt vmcnt(0)1120; GFX11-NEXT: buffer_gl1_inv1121; GFX11-NEXT: buffer_gl0_inv1122; GFX11-NEXT: v_cmp_eq_u32_e32 vcc, v0, v51123; GFX11-NEXT: s_or_b64 s[0:1], vcc, s[0:1]1124; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)1125; GFX11-NEXT: s_and_not1_b64 exec, exec, s[0:1]1126; GFX11-NEXT: s_cbranch_execnz .LBB9_11127; GFX11-NEXT: ; %bb.2: ; %atomicrmw.end1128; GFX11-NEXT: s_or_b64 exec, exec, s[0:1]1129; GFX11-NEXT: ; return to shader part epilog1130;1131; GFX12-LABEL: global_min_saddr_i32_rtn_neg128:1132; GFX12: ; %bb.0:1133; GFX12-NEXT: v_mov_b32_e32 v2, v01134; GFX12-NEXT: global_load_b32 v0, v0, s[2:3] offset:-1281135; GFX12-NEXT: v_add_co_u32 v2, s[0:1], s2, v21136; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)1137; GFX12-NEXT: v_add_co_ci_u32_e64 v3, null, s3, 0, s[0:1]1138; GFX12-NEXT: s_mov_b64 s[0:1], 01139; GFX12-NEXT: .LBB9_1: ; %atomicrmw.start1140; GFX12-NEXT: ; =>This Inner Loop Header: Depth=11141; GFX12-NEXT: s_wait_loadcnt 0x01142; GFX12-NEXT: v_mov_b32_e32 v5, v01143; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)1144; GFX12-NEXT: v_min_i32_e32 v4, v5, v11145; GFX12-NEXT: global_wb scope:SCOPE_SYS1146; GFX12-NEXT: s_wait_storecnt 0x01147; GFX12-NEXT: global_atomic_cmpswap_b32 v0, v[2:3], v[4:5], off offset:-128 th:TH_ATOMIC_RETURN scope:SCOPE_SYS1148; GFX12-NEXT: s_wait_loadcnt 0x01149; GFX12-NEXT: global_inv scope:SCOPE_SYS1150; GFX12-NEXT: v_cmp_eq_u32_e32 vcc, v0, v51151; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)1152; GFX12-NEXT: s_or_b64 s[0:1], vcc, s[0:1]1153; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)1154; GFX12-NEXT: s_and_not1_b64 exec, exec, s[0:1]1155; GFX12-NEXT: s_cbranch_execnz .LBB9_11156; GFX12-NEXT: ; %bb.2: ; %atomicrmw.end1157; GFX12-NEXT: s_or_b64 exec, exec, s[0:1]1158; GFX12-NEXT: s_wait_loadcnt 0x01159; GFX12-NEXT: ; return to shader part epilog1160 %zext.offset = zext i32 %voffset to i641161 %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset1162 %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -1281163 %rtn = atomicrmw min ptr addrspace(1) %gep1, i32 %data seq_cst1164 %cast.rtn = bitcast i32 %rtn to float1165 ret float %cast.rtn1166}1167 1168define amdgpu_ps void @global_min_saddr_i32_nortn(ptr addrspace(1) inreg %sbase, i32 %voffset, i32 %data) {1169; GFX9-LABEL: global_min_saddr_i32_nortn:1170; GFX9: ; %bb.0:1171; GFX9-NEXT: global_load_dword v5, v0, s[2:3]1172; GFX9-NEXT: v_mov_b32_e32 v3, s31173; GFX9-NEXT: v_add_co_u32_e32 v2, vcc, s2, v01174; GFX9-NEXT: v_addc_co_u32_e32 v3, vcc, 0, v3, vcc1175; GFX9-NEXT: s_mov_b64 s[0:1], 01176; GFX9-NEXT: .LBB10_1: ; %atomicrmw.start1177; GFX9-NEXT: ; =>This Inner Loop Header: Depth=11178; GFX9-NEXT: s_waitcnt vmcnt(0)1179; GFX9-NEXT: v_min_i32_e32 v4, v5, v11180; GFX9-NEXT: global_atomic_cmpswap v0, v[2:3], v[4:5], off glc1181; GFX9-NEXT: s_waitcnt vmcnt(0)1182; GFX9-NEXT: buffer_wbinvl11183; GFX9-NEXT: v_cmp_eq_u32_e32 vcc, v0, v51184; GFX9-NEXT: s_or_b64 s[0:1], vcc, s[0:1]1185; GFX9-NEXT: v_mov_b32_e32 v5, v01186; GFX9-NEXT: s_andn2_b64 exec, exec, s[0:1]1187; GFX9-NEXT: s_cbranch_execnz .LBB10_11188; GFX9-NEXT: ; %bb.2: ; %atomicrmw.end1189; GFX9-NEXT: s_endpgm1190;1191; GFX10-LABEL: global_min_saddr_i32_nortn:1192; GFX10: ; %bb.0:1193; GFX10-NEXT: global_load_dword v5, v0, s[2:3]1194; GFX10-NEXT: v_add_co_u32 v2, s[0:1], s2, v01195; GFX10-NEXT: v_add_co_ci_u32_e64 v3, s[0:1], s3, 0, s[0:1]1196; GFX10-NEXT: s_mov_b64 s[0:1], 01197; GFX10-NEXT: .LBB10_1: ; %atomicrmw.start1198; GFX10-NEXT: ; =>This Inner Loop Header: Depth=11199; GFX10-NEXT: s_waitcnt vmcnt(0)1200; GFX10-NEXT: v_min_i32_e32 v4, v5, v11201; GFX10-NEXT: global_atomic_cmpswap v0, v[2:3], v[4:5], off glc1202; GFX10-NEXT: s_waitcnt vmcnt(0)1203; GFX10-NEXT: buffer_gl1_inv1204; GFX10-NEXT: buffer_gl0_inv1205; GFX10-NEXT: v_cmp_eq_u32_e32 vcc, v0, v51206; GFX10-NEXT: v_mov_b32_e32 v5, v01207; GFX10-NEXT: s_or_b64 s[0:1], vcc, s[0:1]1208; GFX10-NEXT: s_andn2_b64 exec, exec, s[0:1]1209; GFX10-NEXT: s_cbranch_execnz .LBB10_11210; GFX10-NEXT: ; %bb.2: ; %atomicrmw.end1211; GFX10-NEXT: s_endpgm1212;1213; GFX11-LABEL: global_min_saddr_i32_nortn:1214; GFX11: ; %bb.0:1215; GFX11-NEXT: global_load_b32 v5, v0, s[2:3]1216; GFX11-NEXT: v_add_co_u32 v2, s[0:1], s2, v01217; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)1218; GFX11-NEXT: v_add_co_ci_u32_e64 v3, null, s3, 0, s[0:1]1219; GFX11-NEXT: s_mov_b64 s[0:1], 01220; GFX11-NEXT: s_waitcnt_depctr depctr_sa_sdst(0)1221; GFX11-NEXT: .LBB10_1: ; %atomicrmw.start1222; GFX11-NEXT: ; =>This Inner Loop Header: Depth=11223; GFX11-NEXT: s_waitcnt vmcnt(0)1224; GFX11-NEXT: v_min_i32_e32 v4, v5, v11225; GFX11-NEXT: global_atomic_cmpswap_b32 v0, v[2:3], v[4:5], off glc1226; GFX11-NEXT: s_waitcnt vmcnt(0)1227; GFX11-NEXT: buffer_gl1_inv1228; GFX11-NEXT: buffer_gl0_inv1229; GFX11-NEXT: v_cmp_eq_u32_e32 vcc, v0, v51230; GFX11-NEXT: v_mov_b32_e32 v5, v01231; GFX11-NEXT: s_or_b64 s[0:1], vcc, s[0:1]1232; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)1233; GFX11-NEXT: s_and_not1_b64 exec, exec, s[0:1]1234; GFX11-NEXT: s_cbranch_execnz .LBB10_11235; GFX11-NEXT: ; %bb.2: ; %atomicrmw.end1236; GFX11-NEXT: s_endpgm1237;1238; GFX12-LABEL: global_min_saddr_i32_nortn:1239; GFX12: ; %bb.0:1240; GFX12-NEXT: global_load_b32 v5, v0, s[2:3]1241; GFX12-NEXT: v_add_co_u32 v2, s[0:1], s2, v01242; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)1243; GFX12-NEXT: v_add_co_ci_u32_e64 v3, null, s3, 0, s[0:1]1244; GFX12-NEXT: s_mov_b64 s[0:1], 01245; GFX12-NEXT: .LBB10_1: ; %atomicrmw.start1246; GFX12-NEXT: ; =>This Inner Loop Header: Depth=11247; GFX12-NEXT: s_wait_loadcnt 0x01248; GFX12-NEXT: v_min_i32_e32 v4, v5, v11249; GFX12-NEXT: global_wb scope:SCOPE_SYS1250; GFX12-NEXT: s_wait_storecnt 0x01251; GFX12-NEXT: global_atomic_cmpswap_b32 v0, v[2:3], v[4:5], off th:TH_ATOMIC_RETURN scope:SCOPE_SYS1252; GFX12-NEXT: s_wait_loadcnt 0x01253; GFX12-NEXT: global_inv scope:SCOPE_SYS1254; GFX12-NEXT: v_cmp_eq_u32_e32 vcc, v0, v51255; GFX12-NEXT: v_mov_b32_e32 v5, v01256; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)1257; GFX12-NEXT: s_or_b64 s[0:1], vcc, s[0:1]1258; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)1259; GFX12-NEXT: s_and_not1_b64 exec, exec, s[0:1]1260; GFX12-NEXT: s_cbranch_execnz .LBB10_11261; GFX12-NEXT: ; %bb.2: ; %atomicrmw.end1262; GFX12-NEXT: s_endpgm1263 %zext.offset = zext i32 %voffset to i641264 %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset1265 %unused = atomicrmw min ptr addrspace(1) %gep0, i32 %data seq_cst1266 ret void1267}1268 1269define amdgpu_ps void @global_min_saddr_i32_nortn_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, i32 %data) {1270; GFX9-LABEL: global_min_saddr_i32_nortn_neg128:1271; GFX9: ; %bb.0:1272; GFX9-NEXT: global_load_dword v5, v0, s[2:3] offset:-1281273; GFX9-NEXT: v_mov_b32_e32 v3, s31274; GFX9-NEXT: v_add_co_u32_e32 v2, vcc, s2, v01275; GFX9-NEXT: v_addc_co_u32_e32 v3, vcc, 0, v3, vcc1276; GFX9-NEXT: s_mov_b64 s[0:1], 01277; GFX9-NEXT: .LBB11_1: ; %atomicrmw.start1278; GFX9-NEXT: ; =>This Inner Loop Header: Depth=11279; GFX9-NEXT: s_waitcnt vmcnt(0)1280; GFX9-NEXT: v_min_i32_e32 v4, v5, v11281; GFX9-NEXT: global_atomic_cmpswap v0, v[2:3], v[4:5], off offset:-128 glc1282; GFX9-NEXT: s_waitcnt vmcnt(0)1283; GFX9-NEXT: buffer_wbinvl11284; GFX9-NEXT: v_cmp_eq_u32_e32 vcc, v0, v51285; GFX9-NEXT: s_or_b64 s[0:1], vcc, s[0:1]1286; GFX9-NEXT: v_mov_b32_e32 v5, v01287; GFX9-NEXT: s_andn2_b64 exec, exec, s[0:1]1288; GFX9-NEXT: s_cbranch_execnz .LBB11_11289; GFX9-NEXT: ; %bb.2: ; %atomicrmw.end1290; GFX9-NEXT: s_endpgm1291;1292; GFX10-LABEL: global_min_saddr_i32_nortn_neg128:1293; GFX10: ; %bb.0:1294; GFX10-NEXT: global_load_dword v5, v0, s[2:3] offset:-1281295; GFX10-NEXT: v_add_co_u32 v2, s[0:1], s2, v01296; GFX10-NEXT: v_add_co_ci_u32_e64 v3, s[0:1], s3, 0, s[0:1]1297; GFX10-NEXT: s_mov_b64 s[0:1], 01298; GFX10-NEXT: .LBB11_1: ; %atomicrmw.start1299; GFX10-NEXT: ; =>This Inner Loop Header: Depth=11300; GFX10-NEXT: s_waitcnt vmcnt(0)1301; GFX10-NEXT: v_min_i32_e32 v4, v5, v11302; GFX10-NEXT: global_atomic_cmpswap v0, v[2:3], v[4:5], off offset:-128 glc1303; GFX10-NEXT: s_waitcnt vmcnt(0)1304; GFX10-NEXT: buffer_gl1_inv1305; GFX10-NEXT: buffer_gl0_inv1306; GFX10-NEXT: v_cmp_eq_u32_e32 vcc, v0, v51307; GFX10-NEXT: v_mov_b32_e32 v5, v01308; GFX10-NEXT: s_or_b64 s[0:1], vcc, s[0:1]1309; GFX10-NEXT: s_andn2_b64 exec, exec, s[0:1]1310; GFX10-NEXT: s_cbranch_execnz .LBB11_11311; GFX10-NEXT: ; %bb.2: ; %atomicrmw.end1312; GFX10-NEXT: s_endpgm1313;1314; GFX11-LABEL: global_min_saddr_i32_nortn_neg128:1315; GFX11: ; %bb.0:1316; GFX11-NEXT: global_load_b32 v5, v0, s[2:3] offset:-1281317; GFX11-NEXT: v_add_co_u32 v2, s[0:1], s2, v01318; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)1319; GFX11-NEXT: v_add_co_ci_u32_e64 v3, null, s3, 0, s[0:1]1320; GFX11-NEXT: s_mov_b64 s[0:1], 01321; GFX11-NEXT: s_waitcnt_depctr depctr_sa_sdst(0)1322; GFX11-NEXT: .LBB11_1: ; %atomicrmw.start1323; GFX11-NEXT: ; =>This Inner Loop Header: Depth=11324; GFX11-NEXT: s_waitcnt vmcnt(0)1325; GFX11-NEXT: v_min_i32_e32 v4, v5, v11326; GFX11-NEXT: global_atomic_cmpswap_b32 v0, v[2:3], v[4:5], off offset:-128 glc1327; GFX11-NEXT: s_waitcnt vmcnt(0)1328; GFX11-NEXT: buffer_gl1_inv1329; GFX11-NEXT: buffer_gl0_inv1330; GFX11-NEXT: v_cmp_eq_u32_e32 vcc, v0, v51331; GFX11-NEXT: v_mov_b32_e32 v5, v01332; GFX11-NEXT: s_or_b64 s[0:1], vcc, s[0:1]1333; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)1334; GFX11-NEXT: s_and_not1_b64 exec, exec, s[0:1]1335; GFX11-NEXT: s_cbranch_execnz .LBB11_11336; GFX11-NEXT: ; %bb.2: ; %atomicrmw.end1337; GFX11-NEXT: s_endpgm1338;1339; GFX12-LABEL: global_min_saddr_i32_nortn_neg128:1340; GFX12: ; %bb.0:1341; GFX12-NEXT: global_load_b32 v5, v0, s[2:3] offset:-1281342; GFX12-NEXT: v_add_co_u32 v2, s[0:1], s2, v01343; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)1344; GFX12-NEXT: v_add_co_ci_u32_e64 v3, null, s3, 0, s[0:1]1345; GFX12-NEXT: s_mov_b64 s[0:1], 01346; GFX12-NEXT: .LBB11_1: ; %atomicrmw.start1347; GFX12-NEXT: ; =>This Inner Loop Header: Depth=11348; GFX12-NEXT: s_wait_loadcnt 0x01349; GFX12-NEXT: v_min_i32_e32 v4, v5, v11350; GFX12-NEXT: global_wb scope:SCOPE_SYS1351; GFX12-NEXT: s_wait_storecnt 0x01352; GFX12-NEXT: global_atomic_cmpswap_b32 v0, v[2:3], v[4:5], off offset:-128 th:TH_ATOMIC_RETURN scope:SCOPE_SYS1353; GFX12-NEXT: s_wait_loadcnt 0x01354; GFX12-NEXT: global_inv scope:SCOPE_SYS1355; GFX12-NEXT: v_cmp_eq_u32_e32 vcc, v0, v51356; GFX12-NEXT: v_mov_b32_e32 v5, v01357; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)1358; GFX12-NEXT: s_or_b64 s[0:1], vcc, s[0:1]1359; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)1360; GFX12-NEXT: s_and_not1_b64 exec, exec, s[0:1]1361; GFX12-NEXT: s_cbranch_execnz .LBB11_11362; GFX12-NEXT: ; %bb.2: ; %atomicrmw.end1363; GFX12-NEXT: s_endpgm1364 %zext.offset = zext i32 %voffset to i641365 %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset1366 %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -1281367 %unused = atomicrmw min ptr addrspace(1) %gep1, i32 %data seq_cst1368 ret void1369}1370 1371define amdgpu_ps <2 x float> @global_min_saddr_i64_rtn(ptr addrspace(1) inreg %sbase, i32 %voffset, i64 %data) {1372; GFX9-LABEL: global_min_saddr_i64_rtn:1373; GFX9: ; %bb.0:1374; GFX9-NEXT: global_load_dwordx2 v[3:4], v0, s[2:3]1375; GFX9-NEXT: v_mov_b32_e32 v6, s31376; GFX9-NEXT: v_add_co_u32_e32 v5, vcc, s2, v01377; GFX9-NEXT: v_addc_co_u32_e32 v6, vcc, 0, v6, vcc1378; GFX9-NEXT: s_mov_b64 s[0:1], 01379; GFX9-NEXT: .LBB12_1: ; %atomicrmw.start1380; GFX9-NEXT: ; =>This Inner Loop Header: Depth=11381; GFX9-NEXT: s_waitcnt vmcnt(0)1382; GFX9-NEXT: v_mov_b32_e32 v10, v41383; GFX9-NEXT: v_mov_b32_e32 v9, v31384; GFX9-NEXT: v_cmp_le_i64_e32 vcc, v[9:10], v[1:2]1385; GFX9-NEXT: v_cndmask_b32_e32 v8, v2, v10, vcc1386; GFX9-NEXT: v_cndmask_b32_e32 v7, v1, v9, vcc1387; GFX9-NEXT: global_atomic_cmpswap_x2 v[3:4], v[5:6], v[7:10], off glc1388; GFX9-NEXT: s_waitcnt vmcnt(0)1389; GFX9-NEXT: buffer_wbinvl11390; GFX9-NEXT: v_cmp_eq_u64_e32 vcc, v[3:4], v[9:10]1391; GFX9-NEXT: s_or_b64 s[0:1], vcc, s[0:1]1392; GFX9-NEXT: s_andn2_b64 exec, exec, s[0:1]1393; GFX9-NEXT: s_cbranch_execnz .LBB12_11394; GFX9-NEXT: ; %bb.2: ; %atomicrmw.end1395; GFX9-NEXT: s_or_b64 exec, exec, s[0:1]1396; GFX9-NEXT: v_mov_b32_e32 v0, v31397; GFX9-NEXT: v_mov_b32_e32 v1, v41398; GFX9-NEXT: ; return to shader part epilog1399;1400; GFX10-LABEL: global_min_saddr_i64_rtn:1401; GFX10: ; %bb.0:1402; GFX10-NEXT: global_load_dwordx2 v[3:4], v0, s[2:3]1403; GFX10-NEXT: v_add_co_u32 v5, s[0:1], s2, v01404; GFX10-NEXT: v_add_co_ci_u32_e64 v6, s[0:1], s3, 0, s[0:1]1405; GFX10-NEXT: s_mov_b64 s[0:1], 01406; GFX10-NEXT: .LBB12_1: ; %atomicrmw.start1407; GFX10-NEXT: ; =>This Inner Loop Header: Depth=11408; GFX10-NEXT: s_waitcnt vmcnt(0)1409; GFX10-NEXT: v_mov_b32_e32 v10, v41410; GFX10-NEXT: v_mov_b32_e32 v9, v31411; GFX10-NEXT: v_cmp_le_i64_e32 vcc, v[9:10], v[1:2]1412; GFX10-NEXT: v_cndmask_b32_e32 v8, v2, v10, vcc1413; GFX10-NEXT: v_cndmask_b32_e32 v7, v1, v9, vcc1414; GFX10-NEXT: global_atomic_cmpswap_x2 v[3:4], v[5:6], v[7:10], off glc1415; GFX10-NEXT: s_waitcnt vmcnt(0)1416; GFX10-NEXT: buffer_gl1_inv1417; GFX10-NEXT: buffer_gl0_inv1418; GFX10-NEXT: v_cmp_eq_u64_e32 vcc, v[3:4], v[9:10]1419; GFX10-NEXT: s_or_b64 s[0:1], vcc, s[0:1]1420; GFX10-NEXT: s_andn2_b64 exec, exec, s[0:1]1421; GFX10-NEXT: s_cbranch_execnz .LBB12_11422; GFX10-NEXT: ; %bb.2: ; %atomicrmw.end1423; GFX10-NEXT: s_or_b64 exec, exec, s[0:1]1424; GFX10-NEXT: v_mov_b32_e32 v0, v31425; GFX10-NEXT: v_mov_b32_e32 v1, v41426; GFX10-NEXT: ; return to shader part epilog1427;1428; GFX11-LABEL: global_min_saddr_i64_rtn:1429; GFX11: ; %bb.0:1430; GFX11-NEXT: global_load_b64 v[3:4], v0, s[2:3]1431; GFX11-NEXT: v_add_co_u32 v5, s[0:1], s2, v01432; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)1433; GFX11-NEXT: v_add_co_ci_u32_e64 v6, null, s3, 0, s[0:1]1434; GFX11-NEXT: s_mov_b64 s[0:1], 01435; GFX11-NEXT: s_waitcnt_depctr depctr_sa_sdst(0)1436; GFX11-NEXT: .LBB12_1: ; %atomicrmw.start1437; GFX11-NEXT: ; =>This Inner Loop Header: Depth=11438; GFX11-NEXT: s_waitcnt vmcnt(0)1439; GFX11-NEXT: v_mov_b32_e32 v10, v41440; GFX11-NEXT: v_mov_b32_e32 v9, v31441; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)1442; GFX11-NEXT: v_cmp_le_i64_e32 vcc, v[9:10], v[1:2]1443; GFX11-NEXT: v_cndmask_b32_e32 v8, v2, v10, vcc1444; GFX11-NEXT: v_cndmask_b32_e32 v7, v1, v9, vcc1445; GFX11-NEXT: global_atomic_cmpswap_b64 v[3:4], v[5:6], v[7:10], off glc1446; GFX11-NEXT: s_waitcnt vmcnt(0)1447; GFX11-NEXT: buffer_gl1_inv1448; GFX11-NEXT: buffer_gl0_inv1449; GFX11-NEXT: v_cmp_eq_u64_e32 vcc, v[3:4], v[9:10]1450; GFX11-NEXT: s_waitcnt_depctr depctr_va_vcc(0)1451; GFX11-NEXT: s_or_b64 s[0:1], vcc, s[0:1]1452; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)1453; GFX11-NEXT: s_and_not1_b64 exec, exec, s[0:1]1454; GFX11-NEXT: s_cbranch_execnz .LBB12_11455; GFX11-NEXT: ; %bb.2: ; %atomicrmw.end1456; GFX11-NEXT: s_or_b64 exec, exec, s[0:1]1457; GFX11-NEXT: v_mov_b32_e32 v0, v31458; GFX11-NEXT: v_mov_b32_e32 v1, v41459; GFX11-NEXT: ; return to shader part epilog1460;1461; GFX12-LABEL: global_min_saddr_i64_rtn:1462; GFX12: ; %bb.0:1463; GFX12-NEXT: global_load_b64 v[3:4], v0, s[2:3]1464; GFX12-NEXT: v_add_co_u32 v5, s[0:1], s2, v01465; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)1466; GFX12-NEXT: v_add_co_ci_u32_e64 v6, null, s3, 0, s[0:1]1467; GFX12-NEXT: s_mov_b64 s[0:1], 01468; GFX12-NEXT: .LBB12_1: ; %atomicrmw.start1469; GFX12-NEXT: ; =>This Inner Loop Header: Depth=11470; GFX12-NEXT: s_wait_loadcnt 0x01471; GFX12-NEXT: v_mov_b32_e32 v10, v41472; GFX12-NEXT: v_mov_b32_e32 v9, v31473; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)1474; GFX12-NEXT: v_cmp_le_i64_e32 vcc, v[9:10], v[1:2]1475; GFX12-NEXT: s_wait_alu depctr_va_vcc(0)1476; GFX12-NEXT: v_cndmask_b32_e32 v8, v2, v10, vcc1477; GFX12-NEXT: v_cndmask_b32_e32 v7, v1, v9, vcc1478; GFX12-NEXT: global_wb scope:SCOPE_SYS1479; GFX12-NEXT: s_wait_storecnt 0x01480; GFX12-NEXT: global_atomic_cmpswap_b64 v[3:4], v[5:6], v[7:10], off th:TH_ATOMIC_RETURN scope:SCOPE_SYS1481; GFX12-NEXT: s_wait_loadcnt 0x01482; GFX12-NEXT: global_inv scope:SCOPE_SYS1483; GFX12-NEXT: v_cmp_eq_u64_e32 vcc, v[3:4], v[9:10]1484; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)1485; GFX12-NEXT: s_or_b64 s[0:1], vcc, s[0:1]1486; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)1487; GFX12-NEXT: s_and_not1_b64 exec, exec, s[0:1]1488; GFX12-NEXT: s_cbranch_execnz .LBB12_11489; GFX12-NEXT: ; %bb.2: ; %atomicrmw.end1490; GFX12-NEXT: s_or_b64 exec, exec, s[0:1]1491; GFX12-NEXT: v_mov_b32_e32 v0, v31492; GFX12-NEXT: v_mov_b32_e32 v1, v41493; GFX12-NEXT: s_wait_loadcnt 0x01494; GFX12-NEXT: ; return to shader part epilog1495 %zext.offset = zext i32 %voffset to i641496 %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset1497 %rtn = atomicrmw min ptr addrspace(1) %gep0, i64 %data seq_cst1498 %cast.rtn = bitcast i64 %rtn to <2 x float>1499 ret <2 x float> %cast.rtn1500}1501 1502define amdgpu_ps <2 x float> @global_min_saddr_i64_rtn_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, i64 %data) {1503; GFX9-LABEL: global_min_saddr_i64_rtn_neg128:1504; GFX9: ; %bb.0:1505; GFX9-NEXT: global_load_dwordx2 v[3:4], v0, s[2:3] offset:-1281506; GFX9-NEXT: v_mov_b32_e32 v6, s31507; GFX9-NEXT: v_add_co_u32_e32 v5, vcc, s2, v01508; GFX9-NEXT: v_addc_co_u32_e32 v6, vcc, 0, v6, vcc1509; GFX9-NEXT: s_mov_b64 s[0:1], 01510; GFX9-NEXT: .LBB13_1: ; %atomicrmw.start1511; GFX9-NEXT: ; =>This Inner Loop Header: Depth=11512; GFX9-NEXT: s_waitcnt vmcnt(0)1513; GFX9-NEXT: v_mov_b32_e32 v10, v41514; GFX9-NEXT: v_mov_b32_e32 v9, v31515; GFX9-NEXT: v_cmp_le_i64_e32 vcc, v[9:10], v[1:2]1516; GFX9-NEXT: v_cndmask_b32_e32 v8, v2, v10, vcc1517; GFX9-NEXT: v_cndmask_b32_e32 v7, v1, v9, vcc1518; GFX9-NEXT: global_atomic_cmpswap_x2 v[3:4], v[5:6], v[7:10], off offset:-128 glc1519; GFX9-NEXT: s_waitcnt vmcnt(0)1520; GFX9-NEXT: buffer_wbinvl11521; GFX9-NEXT: v_cmp_eq_u64_e32 vcc, v[3:4], v[9:10]1522; GFX9-NEXT: s_or_b64 s[0:1], vcc, s[0:1]1523; GFX9-NEXT: s_andn2_b64 exec, exec, s[0:1]1524; GFX9-NEXT: s_cbranch_execnz .LBB13_11525; GFX9-NEXT: ; %bb.2: ; %atomicrmw.end1526; GFX9-NEXT: s_or_b64 exec, exec, s[0:1]1527; GFX9-NEXT: v_mov_b32_e32 v0, v31528; GFX9-NEXT: v_mov_b32_e32 v1, v41529; GFX9-NEXT: ; return to shader part epilog1530;1531; GFX10-LABEL: global_min_saddr_i64_rtn_neg128:1532; GFX10: ; %bb.0:1533; GFX10-NEXT: global_load_dwordx2 v[3:4], v0, s[2:3] offset:-1281534; GFX10-NEXT: v_add_co_u32 v5, s[0:1], s2, v01535; GFX10-NEXT: v_add_co_ci_u32_e64 v6, s[0:1], s3, 0, s[0:1]1536; GFX10-NEXT: s_mov_b64 s[0:1], 01537; GFX10-NEXT: .LBB13_1: ; %atomicrmw.start1538; GFX10-NEXT: ; =>This Inner Loop Header: Depth=11539; GFX10-NEXT: s_waitcnt vmcnt(0)1540; GFX10-NEXT: v_mov_b32_e32 v10, v41541; GFX10-NEXT: v_mov_b32_e32 v9, v31542; GFX10-NEXT: v_cmp_le_i64_e32 vcc, v[9:10], v[1:2]1543; GFX10-NEXT: v_cndmask_b32_e32 v8, v2, v10, vcc1544; GFX10-NEXT: v_cndmask_b32_e32 v7, v1, v9, vcc1545; GFX10-NEXT: global_atomic_cmpswap_x2 v[3:4], v[5:6], v[7:10], off offset:-128 glc1546; GFX10-NEXT: s_waitcnt vmcnt(0)1547; GFX10-NEXT: buffer_gl1_inv1548; GFX10-NEXT: buffer_gl0_inv1549; GFX10-NEXT: v_cmp_eq_u64_e32 vcc, v[3:4], v[9:10]1550; GFX10-NEXT: s_or_b64 s[0:1], vcc, s[0:1]1551; GFX10-NEXT: s_andn2_b64 exec, exec, s[0:1]1552; GFX10-NEXT: s_cbranch_execnz .LBB13_11553; GFX10-NEXT: ; %bb.2: ; %atomicrmw.end1554; GFX10-NEXT: s_or_b64 exec, exec, s[0:1]1555; GFX10-NEXT: v_mov_b32_e32 v0, v31556; GFX10-NEXT: v_mov_b32_e32 v1, v41557; GFX10-NEXT: ; return to shader part epilog1558;1559; GFX11-LABEL: global_min_saddr_i64_rtn_neg128:1560; GFX11: ; %bb.0:1561; GFX11-NEXT: global_load_b64 v[3:4], v0, s[2:3] offset:-1281562; GFX11-NEXT: v_add_co_u32 v5, s[0:1], s2, v01563; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)1564; GFX11-NEXT: v_add_co_ci_u32_e64 v6, null, s3, 0, s[0:1]1565; GFX11-NEXT: s_mov_b64 s[0:1], 01566; GFX11-NEXT: s_waitcnt_depctr depctr_sa_sdst(0)1567; GFX11-NEXT: .LBB13_1: ; %atomicrmw.start1568; GFX11-NEXT: ; =>This Inner Loop Header: Depth=11569; GFX11-NEXT: s_waitcnt vmcnt(0)1570; GFX11-NEXT: v_mov_b32_e32 v10, v41571; GFX11-NEXT: v_mov_b32_e32 v9, v31572; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)1573; GFX11-NEXT: v_cmp_le_i64_e32 vcc, v[9:10], v[1:2]1574; GFX11-NEXT: v_cndmask_b32_e32 v8, v2, v10, vcc1575; GFX11-NEXT: v_cndmask_b32_e32 v7, v1, v9, vcc1576; GFX11-NEXT: global_atomic_cmpswap_b64 v[3:4], v[5:6], v[7:10], off offset:-128 glc1577; GFX11-NEXT: s_waitcnt vmcnt(0)1578; GFX11-NEXT: buffer_gl1_inv1579; GFX11-NEXT: buffer_gl0_inv1580; GFX11-NEXT: v_cmp_eq_u64_e32 vcc, v[3:4], v[9:10]1581; GFX11-NEXT: s_waitcnt_depctr depctr_va_vcc(0)1582; GFX11-NEXT: s_or_b64 s[0:1], vcc, s[0:1]1583; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)1584; GFX11-NEXT: s_and_not1_b64 exec, exec, s[0:1]1585; GFX11-NEXT: s_cbranch_execnz .LBB13_11586; GFX11-NEXT: ; %bb.2: ; %atomicrmw.end1587; GFX11-NEXT: s_or_b64 exec, exec, s[0:1]1588; GFX11-NEXT: v_mov_b32_e32 v0, v31589; GFX11-NEXT: v_mov_b32_e32 v1, v41590; GFX11-NEXT: ; return to shader part epilog1591;1592; GFX12-LABEL: global_min_saddr_i64_rtn_neg128:1593; GFX12: ; %bb.0:1594; GFX12-NEXT: global_load_b64 v[3:4], v0, s[2:3] offset:-1281595; GFX12-NEXT: v_add_co_u32 v5, s[0:1], s2, v01596; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)1597; GFX12-NEXT: v_add_co_ci_u32_e64 v6, null, s3, 0, s[0:1]1598; GFX12-NEXT: s_mov_b64 s[0:1], 01599; GFX12-NEXT: .LBB13_1: ; %atomicrmw.start1600; GFX12-NEXT: ; =>This Inner Loop Header: Depth=11601; GFX12-NEXT: s_wait_loadcnt 0x01602; GFX12-NEXT: v_mov_b32_e32 v10, v41603; GFX12-NEXT: v_mov_b32_e32 v9, v31604; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)1605; GFX12-NEXT: v_cmp_le_i64_e32 vcc, v[9:10], v[1:2]1606; GFX12-NEXT: s_wait_alu depctr_va_vcc(0)1607; GFX12-NEXT: v_cndmask_b32_e32 v8, v2, v10, vcc1608; GFX12-NEXT: v_cndmask_b32_e32 v7, v1, v9, vcc1609; GFX12-NEXT: global_wb scope:SCOPE_SYS1610; GFX12-NEXT: s_wait_storecnt 0x01611; GFX12-NEXT: global_atomic_cmpswap_b64 v[3:4], v[5:6], v[7:10], off offset:-128 th:TH_ATOMIC_RETURN scope:SCOPE_SYS1612; GFX12-NEXT: s_wait_loadcnt 0x01613; GFX12-NEXT: global_inv scope:SCOPE_SYS1614; GFX12-NEXT: v_cmp_eq_u64_e32 vcc, v[3:4], v[9:10]1615; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)1616; GFX12-NEXT: s_or_b64 s[0:1], vcc, s[0:1]1617; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)1618; GFX12-NEXT: s_and_not1_b64 exec, exec, s[0:1]1619; GFX12-NEXT: s_cbranch_execnz .LBB13_11620; GFX12-NEXT: ; %bb.2: ; %atomicrmw.end1621; GFX12-NEXT: s_or_b64 exec, exec, s[0:1]1622; GFX12-NEXT: v_mov_b32_e32 v0, v31623; GFX12-NEXT: v_mov_b32_e32 v1, v41624; GFX12-NEXT: s_wait_loadcnt 0x01625; GFX12-NEXT: ; return to shader part epilog1626 %zext.offset = zext i32 %voffset to i641627 %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset1628 %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -1281629 %rtn = atomicrmw min ptr addrspace(1) %gep1, i64 %data seq_cst1630 %cast.rtn = bitcast i64 %rtn to <2 x float>1631 ret <2 x float> %cast.rtn1632}1633 1634define amdgpu_ps void @global_min_saddr_i64_nortn(ptr addrspace(1) inreg %sbase, i32 %voffset, i64 %data) {1635; GFX9-LABEL: global_min_saddr_i64_nortn:1636; GFX9: ; %bb.0:1637; GFX9-NEXT: global_load_dwordx2 v[5:6], v0, s[2:3]1638; GFX9-NEXT: v_mov_b32_e32 v3, s31639; GFX9-NEXT: v_add_co_u32_e32 v7, vcc, s2, v01640; GFX9-NEXT: v_addc_co_u32_e32 v8, vcc, 0, v3, vcc1641; GFX9-NEXT: s_mov_b64 s[0:1], 01642; GFX9-NEXT: .LBB14_1: ; %atomicrmw.start1643; GFX9-NEXT: ; =>This Inner Loop Header: Depth=11644; GFX9-NEXT: s_waitcnt vmcnt(0)1645; GFX9-NEXT: v_cmp_le_i64_e32 vcc, v[5:6], v[1:2]1646; GFX9-NEXT: v_cndmask_b32_e32 v4, v2, v6, vcc1647; GFX9-NEXT: v_cndmask_b32_e32 v3, v1, v5, vcc1648; GFX9-NEXT: global_atomic_cmpswap_x2 v[3:4], v[7:8], v[3:6], off glc1649; GFX9-NEXT: s_waitcnt vmcnt(0)1650; GFX9-NEXT: buffer_wbinvl11651; GFX9-NEXT: v_cmp_eq_u64_e32 vcc, v[3:4], v[5:6]1652; GFX9-NEXT: v_mov_b32_e32 v6, v41653; GFX9-NEXT: s_or_b64 s[0:1], vcc, s[0:1]1654; GFX9-NEXT: v_mov_b32_e32 v5, v31655; GFX9-NEXT: s_andn2_b64 exec, exec, s[0:1]1656; GFX9-NEXT: s_cbranch_execnz .LBB14_11657; GFX9-NEXT: ; %bb.2: ; %atomicrmw.end1658; GFX9-NEXT: s_endpgm1659;1660; GFX10-LABEL: global_min_saddr_i64_nortn:1661; GFX10: ; %bb.0:1662; GFX10-NEXT: global_load_dwordx2 v[5:6], v0, s[2:3]1663; GFX10-NEXT: v_add_co_u32 v7, s[0:1], s2, v01664; GFX10-NEXT: v_add_co_ci_u32_e64 v8, s[0:1], s3, 0, s[0:1]1665; GFX10-NEXT: s_mov_b64 s[0:1], 01666; GFX10-NEXT: .LBB14_1: ; %atomicrmw.start1667; GFX10-NEXT: ; =>This Inner Loop Header: Depth=11668; GFX10-NEXT: s_waitcnt vmcnt(0)1669; GFX10-NEXT: v_cmp_le_i64_e32 vcc, v[5:6], v[1:2]1670; GFX10-NEXT: v_cndmask_b32_e32 v4, v2, v6, vcc1671; GFX10-NEXT: v_cndmask_b32_e32 v3, v1, v5, vcc1672; GFX10-NEXT: global_atomic_cmpswap_x2 v[3:4], v[7:8], v[3:6], off glc1673; GFX10-NEXT: s_waitcnt vmcnt(0)1674; GFX10-NEXT: buffer_gl1_inv1675; GFX10-NEXT: buffer_gl0_inv1676; GFX10-NEXT: v_cmp_eq_u64_e32 vcc, v[3:4], v[5:6]1677; GFX10-NEXT: v_mov_b32_e32 v6, v41678; GFX10-NEXT: v_mov_b32_e32 v5, v31679; GFX10-NEXT: s_or_b64 s[0:1], vcc, s[0:1]1680; GFX10-NEXT: s_andn2_b64 exec, exec, s[0:1]1681; GFX10-NEXT: s_cbranch_execnz .LBB14_11682; GFX10-NEXT: ; %bb.2: ; %atomicrmw.end1683; GFX10-NEXT: s_endpgm1684;1685; GFX11-LABEL: global_min_saddr_i64_nortn:1686; GFX11: ; %bb.0:1687; GFX11-NEXT: global_load_b64 v[5:6], v0, s[2:3]1688; GFX11-NEXT: v_add_co_u32 v7, s[0:1], s2, v01689; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)1690; GFX11-NEXT: v_add_co_ci_u32_e64 v8, null, s3, 0, s[0:1]1691; GFX11-NEXT: s_mov_b64 s[0:1], 01692; GFX11-NEXT: s_waitcnt_depctr depctr_sa_sdst(0)1693; GFX11-NEXT: .LBB14_1: ; %atomicrmw.start1694; GFX11-NEXT: ; =>This Inner Loop Header: Depth=11695; GFX11-NEXT: s_waitcnt vmcnt(0)1696; GFX11-NEXT: v_cmp_le_i64_e32 vcc, v[5:6], v[1:2]1697; GFX11-NEXT: v_cndmask_b32_e32 v4, v2, v6, vcc1698; GFX11-NEXT: v_cndmask_b32_e32 v3, v1, v5, vcc1699; GFX11-NEXT: global_atomic_cmpswap_b64 v[3:4], v[7:8], v[3:6], off glc1700; GFX11-NEXT: s_waitcnt vmcnt(0)1701; GFX11-NEXT: buffer_gl1_inv1702; GFX11-NEXT: buffer_gl0_inv1703; GFX11-NEXT: v_cmp_eq_u64_e32 vcc, v[3:4], v[5:6]1704; GFX11-NEXT: s_waitcnt_depctr depctr_va_vcc(0)1705; GFX11-NEXT: v_mov_b32_e32 v6, v41706; GFX11-NEXT: v_mov_b32_e32 v5, v31707; GFX11-NEXT: s_or_b64 s[0:1], vcc, s[0:1]1708; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)1709; GFX11-NEXT: s_and_not1_b64 exec, exec, s[0:1]1710; GFX11-NEXT: s_cbranch_execnz .LBB14_11711; GFX11-NEXT: ; %bb.2: ; %atomicrmw.end1712; GFX11-NEXT: s_endpgm1713;1714; GFX12-LABEL: global_min_saddr_i64_nortn:1715; GFX12: ; %bb.0:1716; GFX12-NEXT: global_load_b64 v[5:6], v0, s[2:3]1717; GFX12-NEXT: v_add_co_u32 v7, s[0:1], s2, v01718; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)1719; GFX12-NEXT: v_add_co_ci_u32_e64 v8, null, s3, 0, s[0:1]1720; GFX12-NEXT: s_mov_b64 s[0:1], 01721; GFX12-NEXT: .LBB14_1: ; %atomicrmw.start1722; GFX12-NEXT: ; =>This Inner Loop Header: Depth=11723; GFX12-NEXT: s_wait_loadcnt 0x01724; GFX12-NEXT: v_cmp_le_i64_e32 vcc, v[5:6], v[1:2]1725; GFX12-NEXT: s_wait_alu depctr_va_vcc(0)1726; GFX12-NEXT: v_cndmask_b32_e32 v4, v2, v6, vcc1727; GFX12-NEXT: v_cndmask_b32_e32 v3, v1, v5, vcc1728; GFX12-NEXT: global_wb scope:SCOPE_SYS1729; GFX12-NEXT: s_wait_storecnt 0x01730; GFX12-NEXT: global_atomic_cmpswap_b64 v[3:4], v[7:8], v[3:6], off th:TH_ATOMIC_RETURN scope:SCOPE_SYS1731; GFX12-NEXT: s_wait_loadcnt 0x01732; GFX12-NEXT: global_inv scope:SCOPE_SYS1733; GFX12-NEXT: v_cmp_eq_u64_e32 vcc, v[3:4], v[5:6]1734; GFX12-NEXT: v_mov_b32_e32 v6, v41735; GFX12-NEXT: v_mov_b32_e32 v5, v31736; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)1737; GFX12-NEXT: s_or_b64 s[0:1], vcc, s[0:1]1738; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)1739; GFX12-NEXT: s_and_not1_b64 exec, exec, s[0:1]1740; GFX12-NEXT: s_cbranch_execnz .LBB14_11741; GFX12-NEXT: ; %bb.2: ; %atomicrmw.end1742; GFX12-NEXT: s_endpgm1743 %zext.offset = zext i32 %voffset to i641744 %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset1745 %unused = atomicrmw min ptr addrspace(1) %gep0, i64 %data seq_cst1746 ret void1747}1748 1749define amdgpu_ps void @global_min_saddr_i64_nortn_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, i64 %data) {1750; GFX9-LABEL: global_min_saddr_i64_nortn_neg128:1751; GFX9: ; %bb.0:1752; GFX9-NEXT: global_load_dwordx2 v[5:6], v0, s[2:3] offset:-1281753; GFX9-NEXT: v_mov_b32_e32 v3, s31754; GFX9-NEXT: v_add_co_u32_e32 v7, vcc, s2, v01755; GFX9-NEXT: v_addc_co_u32_e32 v8, vcc, 0, v3, vcc1756; GFX9-NEXT: s_mov_b64 s[0:1], 01757; GFX9-NEXT: .LBB15_1: ; %atomicrmw.start1758; GFX9-NEXT: ; =>This Inner Loop Header: Depth=11759; GFX9-NEXT: s_waitcnt vmcnt(0)1760; GFX9-NEXT: v_cmp_le_i64_e32 vcc, v[5:6], v[1:2]1761; GFX9-NEXT: v_cndmask_b32_e32 v4, v2, v6, vcc1762; GFX9-NEXT: v_cndmask_b32_e32 v3, v1, v5, vcc1763; GFX9-NEXT: global_atomic_cmpswap_x2 v[3:4], v[7:8], v[3:6], off offset:-128 glc1764; GFX9-NEXT: s_waitcnt vmcnt(0)1765; GFX9-NEXT: buffer_wbinvl11766; GFX9-NEXT: v_cmp_eq_u64_e32 vcc, v[3:4], v[5:6]1767; GFX9-NEXT: v_mov_b32_e32 v6, v41768; GFX9-NEXT: s_or_b64 s[0:1], vcc, s[0:1]1769; GFX9-NEXT: v_mov_b32_e32 v5, v31770; GFX9-NEXT: s_andn2_b64 exec, exec, s[0:1]1771; GFX9-NEXT: s_cbranch_execnz .LBB15_11772; GFX9-NEXT: ; %bb.2: ; %atomicrmw.end1773; GFX9-NEXT: s_endpgm1774;1775; GFX10-LABEL: global_min_saddr_i64_nortn_neg128:1776; GFX10: ; %bb.0:1777; GFX10-NEXT: global_load_dwordx2 v[5:6], v0, s[2:3] offset:-1281778; GFX10-NEXT: v_add_co_u32 v7, s[0:1], s2, v01779; GFX10-NEXT: v_add_co_ci_u32_e64 v8, s[0:1], s3, 0, s[0:1]1780; GFX10-NEXT: s_mov_b64 s[0:1], 01781; GFX10-NEXT: .LBB15_1: ; %atomicrmw.start1782; GFX10-NEXT: ; =>This Inner Loop Header: Depth=11783; GFX10-NEXT: s_waitcnt vmcnt(0)1784; GFX10-NEXT: v_cmp_le_i64_e32 vcc, v[5:6], v[1:2]1785; GFX10-NEXT: v_cndmask_b32_e32 v4, v2, v6, vcc1786; GFX10-NEXT: v_cndmask_b32_e32 v3, v1, v5, vcc1787; GFX10-NEXT: global_atomic_cmpswap_x2 v[3:4], v[7:8], v[3:6], off offset:-128 glc1788; GFX10-NEXT: s_waitcnt vmcnt(0)1789; GFX10-NEXT: buffer_gl1_inv1790; GFX10-NEXT: buffer_gl0_inv1791; GFX10-NEXT: v_cmp_eq_u64_e32 vcc, v[3:4], v[5:6]1792; GFX10-NEXT: v_mov_b32_e32 v6, v41793; GFX10-NEXT: v_mov_b32_e32 v5, v31794; GFX10-NEXT: s_or_b64 s[0:1], vcc, s[0:1]1795; GFX10-NEXT: s_andn2_b64 exec, exec, s[0:1]1796; GFX10-NEXT: s_cbranch_execnz .LBB15_11797; GFX10-NEXT: ; %bb.2: ; %atomicrmw.end1798; GFX10-NEXT: s_endpgm1799;1800; GFX11-LABEL: global_min_saddr_i64_nortn_neg128:1801; GFX11: ; %bb.0:1802; GFX11-NEXT: global_load_b64 v[5:6], v0, s[2:3] offset:-1281803; GFX11-NEXT: v_add_co_u32 v7, s[0:1], s2, v01804; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)1805; GFX11-NEXT: v_add_co_ci_u32_e64 v8, null, s3, 0, s[0:1]1806; GFX11-NEXT: s_mov_b64 s[0:1], 01807; GFX11-NEXT: s_waitcnt_depctr depctr_sa_sdst(0)1808; GFX11-NEXT: .LBB15_1: ; %atomicrmw.start1809; GFX11-NEXT: ; =>This Inner Loop Header: Depth=11810; GFX11-NEXT: s_waitcnt vmcnt(0)1811; GFX11-NEXT: v_cmp_le_i64_e32 vcc, v[5:6], v[1:2]1812; GFX11-NEXT: v_cndmask_b32_e32 v4, v2, v6, vcc1813; GFX11-NEXT: v_cndmask_b32_e32 v3, v1, v5, vcc1814; GFX11-NEXT: global_atomic_cmpswap_b64 v[3:4], v[7:8], v[3:6], off offset:-128 glc1815; GFX11-NEXT: s_waitcnt vmcnt(0)1816; GFX11-NEXT: buffer_gl1_inv1817; GFX11-NEXT: buffer_gl0_inv1818; GFX11-NEXT: v_cmp_eq_u64_e32 vcc, v[3:4], v[5:6]1819; GFX11-NEXT: s_waitcnt_depctr depctr_va_vcc(0)1820; GFX11-NEXT: v_mov_b32_e32 v6, v41821; GFX11-NEXT: v_mov_b32_e32 v5, v31822; GFX11-NEXT: s_or_b64 s[0:1], vcc, s[0:1]1823; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)1824; GFX11-NEXT: s_and_not1_b64 exec, exec, s[0:1]1825; GFX11-NEXT: s_cbranch_execnz .LBB15_11826; GFX11-NEXT: ; %bb.2: ; %atomicrmw.end1827; GFX11-NEXT: s_endpgm1828;1829; GFX12-LABEL: global_min_saddr_i64_nortn_neg128:1830; GFX12: ; %bb.0:1831; GFX12-NEXT: global_load_b64 v[5:6], v0, s[2:3] offset:-1281832; GFX12-NEXT: v_add_co_u32 v7, s[0:1], s2, v01833; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)1834; GFX12-NEXT: v_add_co_ci_u32_e64 v8, null, s3, 0, s[0:1]1835; GFX12-NEXT: s_mov_b64 s[0:1], 01836; GFX12-NEXT: .LBB15_1: ; %atomicrmw.start1837; GFX12-NEXT: ; =>This Inner Loop Header: Depth=11838; GFX12-NEXT: s_wait_loadcnt 0x01839; GFX12-NEXT: v_cmp_le_i64_e32 vcc, v[5:6], v[1:2]1840; GFX12-NEXT: s_wait_alu depctr_va_vcc(0)1841; GFX12-NEXT: v_cndmask_b32_e32 v4, v2, v6, vcc1842; GFX12-NEXT: v_cndmask_b32_e32 v3, v1, v5, vcc1843; GFX12-NEXT: global_wb scope:SCOPE_SYS1844; GFX12-NEXT: s_wait_storecnt 0x01845; GFX12-NEXT: global_atomic_cmpswap_b64 v[3:4], v[7:8], v[3:6], off offset:-128 th:TH_ATOMIC_RETURN scope:SCOPE_SYS1846; GFX12-NEXT: s_wait_loadcnt 0x01847; GFX12-NEXT: global_inv scope:SCOPE_SYS1848; GFX12-NEXT: v_cmp_eq_u64_e32 vcc, v[3:4], v[5:6]1849; GFX12-NEXT: v_mov_b32_e32 v6, v41850; GFX12-NEXT: v_mov_b32_e32 v5, v31851; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)1852; GFX12-NEXT: s_or_b64 s[0:1], vcc, s[0:1]1853; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)1854; GFX12-NEXT: s_and_not1_b64 exec, exec, s[0:1]1855; GFX12-NEXT: s_cbranch_execnz .LBB15_11856; GFX12-NEXT: ; %bb.2: ; %atomicrmw.end1857; GFX12-NEXT: s_endpgm1858 %zext.offset = zext i32 %voffset to i641859 %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset1860 %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -1281861 %unused = atomicrmw min ptr addrspace(1) %gep1, i64 %data seq_cst1862 ret void1863}1864 1865; --------------------------------------------------------------------------------1866; atomicrmw umax1867; --------------------------------------------------------------------------------1868 1869define amdgpu_ps float @global_umax_saddr_i32_rtn(ptr addrspace(1) inreg %sbase, i32 %voffset, i32 %data) {1870; GFX9-LABEL: global_umax_saddr_i32_rtn:1871; GFX9: ; %bb.0:1872; GFX9-NEXT: v_mov_b32_e32 v2, v01873; GFX9-NEXT: global_load_dword v0, v0, s[2:3]1874; GFX9-NEXT: v_mov_b32_e32 v3, s31875; GFX9-NEXT: v_add_co_u32_e32 v2, vcc, s2, v21876; GFX9-NEXT: v_addc_co_u32_e32 v3, vcc, 0, v3, vcc1877; GFX9-NEXT: s_mov_b64 s[0:1], 01878; GFX9-NEXT: .LBB16_1: ; %atomicrmw.start1879; GFX9-NEXT: ; =>This Inner Loop Header: Depth=11880; GFX9-NEXT: s_waitcnt vmcnt(0)1881; GFX9-NEXT: v_mov_b32_e32 v5, v01882; GFX9-NEXT: v_max_u32_e32 v4, v5, v11883; GFX9-NEXT: global_atomic_cmpswap v0, v[2:3], v[4:5], off glc1884; GFX9-NEXT: s_waitcnt vmcnt(0)1885; GFX9-NEXT: buffer_wbinvl11886; GFX9-NEXT: v_cmp_eq_u32_e32 vcc, v0, v51887; GFX9-NEXT: s_or_b64 s[0:1], vcc, s[0:1]1888; GFX9-NEXT: s_andn2_b64 exec, exec, s[0:1]1889; GFX9-NEXT: s_cbranch_execnz .LBB16_11890; GFX9-NEXT: ; %bb.2: ; %atomicrmw.end1891; GFX9-NEXT: s_or_b64 exec, exec, s[0:1]1892; GFX9-NEXT: ; return to shader part epilog1893;1894; GFX10-LABEL: global_umax_saddr_i32_rtn:1895; GFX10: ; %bb.0:1896; GFX10-NEXT: v_mov_b32_e32 v2, v01897; GFX10-NEXT: global_load_dword v0, v0, s[2:3]1898; GFX10-NEXT: v_add_co_u32 v2, s[0:1], s2, v21899; GFX10-NEXT: v_add_co_ci_u32_e64 v3, s[0:1], s3, 0, s[0:1]1900; GFX10-NEXT: s_mov_b64 s[0:1], 01901; GFX10-NEXT: .LBB16_1: ; %atomicrmw.start1902; GFX10-NEXT: ; =>This Inner Loop Header: Depth=11903; GFX10-NEXT: s_waitcnt vmcnt(0)1904; GFX10-NEXT: v_mov_b32_e32 v5, v01905; GFX10-NEXT: v_max_u32_e32 v4, v5, v11906; GFX10-NEXT: global_atomic_cmpswap v0, v[2:3], v[4:5], off glc1907; GFX10-NEXT: s_waitcnt vmcnt(0)1908; GFX10-NEXT: buffer_gl1_inv1909; GFX10-NEXT: buffer_gl0_inv1910; GFX10-NEXT: v_cmp_eq_u32_e32 vcc, v0, v51911; GFX10-NEXT: s_or_b64 s[0:1], vcc, s[0:1]1912; GFX10-NEXT: s_andn2_b64 exec, exec, s[0:1]1913; GFX10-NEXT: s_cbranch_execnz .LBB16_11914; GFX10-NEXT: ; %bb.2: ; %atomicrmw.end1915; GFX10-NEXT: s_or_b64 exec, exec, s[0:1]1916; GFX10-NEXT: ; return to shader part epilog1917;1918; GFX11-LABEL: global_umax_saddr_i32_rtn:1919; GFX11: ; %bb.0:1920; GFX11-NEXT: v_mov_b32_e32 v2, v01921; GFX11-NEXT: global_load_b32 v0, v0, s[2:3]1922; GFX11-NEXT: v_add_co_u32 v2, s[0:1], s2, v21923; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)1924; GFX11-NEXT: v_add_co_ci_u32_e64 v3, null, s3, 0, s[0:1]1925; GFX11-NEXT: s_mov_b64 s[0:1], 01926; GFX11-NEXT: s_waitcnt_depctr depctr_sa_sdst(0)1927; GFX11-NEXT: .LBB16_1: ; %atomicrmw.start1928; GFX11-NEXT: ; =>This Inner Loop Header: Depth=11929; GFX11-NEXT: s_waitcnt vmcnt(0)1930; GFX11-NEXT: v_mov_b32_e32 v5, v01931; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)1932; GFX11-NEXT: v_max_u32_e32 v4, v5, v11933; GFX11-NEXT: global_atomic_cmpswap_b32 v0, v[2:3], v[4:5], off glc1934; GFX11-NEXT: s_waitcnt vmcnt(0)1935; GFX11-NEXT: buffer_gl1_inv1936; GFX11-NEXT: buffer_gl0_inv1937; GFX11-NEXT: v_cmp_eq_u32_e32 vcc, v0, v51938; GFX11-NEXT: s_or_b64 s[0:1], vcc, s[0:1]1939; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)1940; GFX11-NEXT: s_and_not1_b64 exec, exec, s[0:1]1941; GFX11-NEXT: s_cbranch_execnz .LBB16_11942; GFX11-NEXT: ; %bb.2: ; %atomicrmw.end1943; GFX11-NEXT: s_or_b64 exec, exec, s[0:1]1944; GFX11-NEXT: ; return to shader part epilog1945;1946; GFX12-LABEL: global_umax_saddr_i32_rtn:1947; GFX12: ; %bb.0:1948; GFX12-NEXT: v_mov_b32_e32 v2, v01949; GFX12-NEXT: global_load_b32 v0, v0, s[2:3]1950; GFX12-NEXT: v_add_co_u32 v2, s[0:1], s2, v21951; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)1952; GFX12-NEXT: v_add_co_ci_u32_e64 v3, null, s3, 0, s[0:1]1953; GFX12-NEXT: s_mov_b64 s[0:1], 01954; GFX12-NEXT: .LBB16_1: ; %atomicrmw.start1955; GFX12-NEXT: ; =>This Inner Loop Header: Depth=11956; GFX12-NEXT: s_wait_loadcnt 0x01957; GFX12-NEXT: v_mov_b32_e32 v5, v01958; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)1959; GFX12-NEXT: v_max_u32_e32 v4, v5, v11960; GFX12-NEXT: global_wb scope:SCOPE_SYS1961; GFX12-NEXT: s_wait_storecnt 0x01962; GFX12-NEXT: global_atomic_cmpswap_b32 v0, v[2:3], v[4:5], off th:TH_ATOMIC_RETURN scope:SCOPE_SYS1963; GFX12-NEXT: s_wait_loadcnt 0x01964; GFX12-NEXT: global_inv scope:SCOPE_SYS1965; GFX12-NEXT: v_cmp_eq_u32_e32 vcc, v0, v51966; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)1967; GFX12-NEXT: s_or_b64 s[0:1], vcc, s[0:1]1968; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)1969; GFX12-NEXT: s_and_not1_b64 exec, exec, s[0:1]1970; GFX12-NEXT: s_cbranch_execnz .LBB16_11971; GFX12-NEXT: ; %bb.2: ; %atomicrmw.end1972; GFX12-NEXT: s_or_b64 exec, exec, s[0:1]1973; GFX12-NEXT: s_wait_loadcnt 0x01974; GFX12-NEXT: ; return to shader part epilog1975 %zext.offset = zext i32 %voffset to i641976 %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset1977 %rtn = atomicrmw umax ptr addrspace(1) %gep0, i32 %data seq_cst1978 %cast.rtn = bitcast i32 %rtn to float1979 ret float %cast.rtn1980}1981 1982define amdgpu_ps float @global_umax_saddr_i32_rtn_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, i32 %data) {1983; GFX9-LABEL: global_umax_saddr_i32_rtn_neg128:1984; GFX9: ; %bb.0:1985; GFX9-NEXT: v_mov_b32_e32 v2, v01986; GFX9-NEXT: global_load_dword v0, v0, s[2:3] offset:-1281987; GFX9-NEXT: v_mov_b32_e32 v3, s31988; GFX9-NEXT: v_add_co_u32_e32 v2, vcc, s2, v21989; GFX9-NEXT: v_addc_co_u32_e32 v3, vcc, 0, v3, vcc1990; GFX9-NEXT: s_mov_b64 s[0:1], 01991; GFX9-NEXT: .LBB17_1: ; %atomicrmw.start1992; GFX9-NEXT: ; =>This Inner Loop Header: Depth=11993; GFX9-NEXT: s_waitcnt vmcnt(0)1994; GFX9-NEXT: v_mov_b32_e32 v5, v01995; GFX9-NEXT: v_max_u32_e32 v4, v5, v11996; GFX9-NEXT: global_atomic_cmpswap v0, v[2:3], v[4:5], off offset:-128 glc1997; GFX9-NEXT: s_waitcnt vmcnt(0)1998; GFX9-NEXT: buffer_wbinvl11999; GFX9-NEXT: v_cmp_eq_u32_e32 vcc, v0, v52000; GFX9-NEXT: s_or_b64 s[0:1], vcc, s[0:1]2001; GFX9-NEXT: s_andn2_b64 exec, exec, s[0:1]2002; GFX9-NEXT: s_cbranch_execnz .LBB17_12003; GFX9-NEXT: ; %bb.2: ; %atomicrmw.end2004; GFX9-NEXT: s_or_b64 exec, exec, s[0:1]2005; GFX9-NEXT: ; return to shader part epilog2006;2007; GFX10-LABEL: global_umax_saddr_i32_rtn_neg128:2008; GFX10: ; %bb.0:2009; GFX10-NEXT: v_mov_b32_e32 v2, v02010; GFX10-NEXT: global_load_dword v0, v0, s[2:3] offset:-1282011; GFX10-NEXT: v_add_co_u32 v2, s[0:1], s2, v22012; GFX10-NEXT: v_add_co_ci_u32_e64 v3, s[0:1], s3, 0, s[0:1]2013; GFX10-NEXT: s_mov_b64 s[0:1], 02014; GFX10-NEXT: .LBB17_1: ; %atomicrmw.start2015; GFX10-NEXT: ; =>This Inner Loop Header: Depth=12016; GFX10-NEXT: s_waitcnt vmcnt(0)2017; GFX10-NEXT: v_mov_b32_e32 v5, v02018; GFX10-NEXT: v_max_u32_e32 v4, v5, v12019; GFX10-NEXT: global_atomic_cmpswap v0, v[2:3], v[4:5], off offset:-128 glc2020; GFX10-NEXT: s_waitcnt vmcnt(0)2021; GFX10-NEXT: buffer_gl1_inv2022; GFX10-NEXT: buffer_gl0_inv2023; GFX10-NEXT: v_cmp_eq_u32_e32 vcc, v0, v52024; GFX10-NEXT: s_or_b64 s[0:1], vcc, s[0:1]2025; GFX10-NEXT: s_andn2_b64 exec, exec, s[0:1]2026; GFX10-NEXT: s_cbranch_execnz .LBB17_12027; GFX10-NEXT: ; %bb.2: ; %atomicrmw.end2028; GFX10-NEXT: s_or_b64 exec, exec, s[0:1]2029; GFX10-NEXT: ; return to shader part epilog2030;2031; GFX11-LABEL: global_umax_saddr_i32_rtn_neg128:2032; GFX11: ; %bb.0:2033; GFX11-NEXT: v_mov_b32_e32 v2, v02034; GFX11-NEXT: global_load_b32 v0, v0, s[2:3] offset:-1282035; GFX11-NEXT: v_add_co_u32 v2, s[0:1], s2, v22036; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)2037; GFX11-NEXT: v_add_co_ci_u32_e64 v3, null, s3, 0, s[0:1]2038; GFX11-NEXT: s_mov_b64 s[0:1], 02039; GFX11-NEXT: s_waitcnt_depctr depctr_sa_sdst(0)2040; GFX11-NEXT: .LBB17_1: ; %atomicrmw.start2041; GFX11-NEXT: ; =>This Inner Loop Header: Depth=12042; GFX11-NEXT: s_waitcnt vmcnt(0)2043; GFX11-NEXT: v_mov_b32_e32 v5, v02044; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)2045; GFX11-NEXT: v_max_u32_e32 v4, v5, v12046; GFX11-NEXT: global_atomic_cmpswap_b32 v0, v[2:3], v[4:5], off offset:-128 glc2047; GFX11-NEXT: s_waitcnt vmcnt(0)2048; GFX11-NEXT: buffer_gl1_inv2049; GFX11-NEXT: buffer_gl0_inv2050; GFX11-NEXT: v_cmp_eq_u32_e32 vcc, v0, v52051; GFX11-NEXT: s_or_b64 s[0:1], vcc, s[0:1]2052; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)2053; GFX11-NEXT: s_and_not1_b64 exec, exec, s[0:1]2054; GFX11-NEXT: s_cbranch_execnz .LBB17_12055; GFX11-NEXT: ; %bb.2: ; %atomicrmw.end2056; GFX11-NEXT: s_or_b64 exec, exec, s[0:1]2057; GFX11-NEXT: ; return to shader part epilog2058;2059; GFX12-LABEL: global_umax_saddr_i32_rtn_neg128:2060; GFX12: ; %bb.0:2061; GFX12-NEXT: v_mov_b32_e32 v2, v02062; GFX12-NEXT: global_load_b32 v0, v0, s[2:3] offset:-1282063; GFX12-NEXT: v_add_co_u32 v2, s[0:1], s2, v22064; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)2065; GFX12-NEXT: v_add_co_ci_u32_e64 v3, null, s3, 0, s[0:1]2066; GFX12-NEXT: s_mov_b64 s[0:1], 02067; GFX12-NEXT: .LBB17_1: ; %atomicrmw.start2068; GFX12-NEXT: ; =>This Inner Loop Header: Depth=12069; GFX12-NEXT: s_wait_loadcnt 0x02070; GFX12-NEXT: v_mov_b32_e32 v5, v02071; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)2072; GFX12-NEXT: v_max_u32_e32 v4, v5, v12073; GFX12-NEXT: global_wb scope:SCOPE_SYS2074; GFX12-NEXT: s_wait_storecnt 0x02075; GFX12-NEXT: global_atomic_cmpswap_b32 v0, v[2:3], v[4:5], off offset:-128 th:TH_ATOMIC_RETURN scope:SCOPE_SYS2076; GFX12-NEXT: s_wait_loadcnt 0x02077; GFX12-NEXT: global_inv scope:SCOPE_SYS2078; GFX12-NEXT: v_cmp_eq_u32_e32 vcc, v0, v52079; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)2080; GFX12-NEXT: s_or_b64 s[0:1], vcc, s[0:1]2081; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)2082; GFX12-NEXT: s_and_not1_b64 exec, exec, s[0:1]2083; GFX12-NEXT: s_cbranch_execnz .LBB17_12084; GFX12-NEXT: ; %bb.2: ; %atomicrmw.end2085; GFX12-NEXT: s_or_b64 exec, exec, s[0:1]2086; GFX12-NEXT: s_wait_loadcnt 0x02087; GFX12-NEXT: ; return to shader part epilog2088 %zext.offset = zext i32 %voffset to i642089 %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset2090 %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -1282091 %rtn = atomicrmw umax ptr addrspace(1) %gep1, i32 %data seq_cst2092 %cast.rtn = bitcast i32 %rtn to float2093 ret float %cast.rtn2094}2095 2096define amdgpu_ps void @global_umax_saddr_i32_nortn(ptr addrspace(1) inreg %sbase, i32 %voffset, i32 %data) {2097; GFX9-LABEL: global_umax_saddr_i32_nortn:2098; GFX9: ; %bb.0:2099; GFX9-NEXT: global_load_dword v5, v0, s[2:3]2100; GFX9-NEXT: v_mov_b32_e32 v3, s32101; GFX9-NEXT: v_add_co_u32_e32 v2, vcc, s2, v02102; GFX9-NEXT: v_addc_co_u32_e32 v3, vcc, 0, v3, vcc2103; GFX9-NEXT: s_mov_b64 s[0:1], 02104; GFX9-NEXT: .LBB18_1: ; %atomicrmw.start2105; GFX9-NEXT: ; =>This Inner Loop Header: Depth=12106; GFX9-NEXT: s_waitcnt vmcnt(0)2107; GFX9-NEXT: v_max_u32_e32 v4, v5, v12108; GFX9-NEXT: global_atomic_cmpswap v0, v[2:3], v[4:5], off glc2109; GFX9-NEXT: s_waitcnt vmcnt(0)2110; GFX9-NEXT: buffer_wbinvl12111; GFX9-NEXT: v_cmp_eq_u32_e32 vcc, v0, v52112; GFX9-NEXT: s_or_b64 s[0:1], vcc, s[0:1]2113; GFX9-NEXT: v_mov_b32_e32 v5, v02114; GFX9-NEXT: s_andn2_b64 exec, exec, s[0:1]2115; GFX9-NEXT: s_cbranch_execnz .LBB18_12116; GFX9-NEXT: ; %bb.2: ; %atomicrmw.end2117; GFX9-NEXT: s_endpgm2118;2119; GFX10-LABEL: global_umax_saddr_i32_nortn:2120; GFX10: ; %bb.0:2121; GFX10-NEXT: global_load_dword v5, v0, s[2:3]2122; GFX10-NEXT: v_add_co_u32 v2, s[0:1], s2, v02123; GFX10-NEXT: v_add_co_ci_u32_e64 v3, s[0:1], s3, 0, s[0:1]2124; GFX10-NEXT: s_mov_b64 s[0:1], 02125; GFX10-NEXT: .LBB18_1: ; %atomicrmw.start2126; GFX10-NEXT: ; =>This Inner Loop Header: Depth=12127; GFX10-NEXT: s_waitcnt vmcnt(0)2128; GFX10-NEXT: v_max_u32_e32 v4, v5, v12129; GFX10-NEXT: global_atomic_cmpswap v0, v[2:3], v[4:5], off glc2130; GFX10-NEXT: s_waitcnt vmcnt(0)2131; GFX10-NEXT: buffer_gl1_inv2132; GFX10-NEXT: buffer_gl0_inv2133; GFX10-NEXT: v_cmp_eq_u32_e32 vcc, v0, v52134; GFX10-NEXT: v_mov_b32_e32 v5, v02135; GFX10-NEXT: s_or_b64 s[0:1], vcc, s[0:1]2136; GFX10-NEXT: s_andn2_b64 exec, exec, s[0:1]2137; GFX10-NEXT: s_cbranch_execnz .LBB18_12138; GFX10-NEXT: ; %bb.2: ; %atomicrmw.end2139; GFX10-NEXT: s_endpgm2140;2141; GFX11-LABEL: global_umax_saddr_i32_nortn:2142; GFX11: ; %bb.0:2143; GFX11-NEXT: global_load_b32 v5, v0, s[2:3]2144; GFX11-NEXT: v_add_co_u32 v2, s[0:1], s2, v02145; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)2146; GFX11-NEXT: v_add_co_ci_u32_e64 v3, null, s3, 0, s[0:1]2147; GFX11-NEXT: s_mov_b64 s[0:1], 02148; GFX11-NEXT: s_waitcnt_depctr depctr_sa_sdst(0)2149; GFX11-NEXT: .LBB18_1: ; %atomicrmw.start2150; GFX11-NEXT: ; =>This Inner Loop Header: Depth=12151; GFX11-NEXT: s_waitcnt vmcnt(0)2152; GFX11-NEXT: v_max_u32_e32 v4, v5, v12153; GFX11-NEXT: global_atomic_cmpswap_b32 v0, v[2:3], v[4:5], off glc2154; GFX11-NEXT: s_waitcnt vmcnt(0)2155; GFX11-NEXT: buffer_gl1_inv2156; GFX11-NEXT: buffer_gl0_inv2157; GFX11-NEXT: v_cmp_eq_u32_e32 vcc, v0, v52158; GFX11-NEXT: v_mov_b32_e32 v5, v02159; GFX11-NEXT: s_or_b64 s[0:1], vcc, s[0:1]2160; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)2161; GFX11-NEXT: s_and_not1_b64 exec, exec, s[0:1]2162; GFX11-NEXT: s_cbranch_execnz .LBB18_12163; GFX11-NEXT: ; %bb.2: ; %atomicrmw.end2164; GFX11-NEXT: s_endpgm2165;2166; GFX12-LABEL: global_umax_saddr_i32_nortn:2167; GFX12: ; %bb.0:2168; GFX12-NEXT: global_load_b32 v5, v0, s[2:3]2169; GFX12-NEXT: v_add_co_u32 v2, s[0:1], s2, v02170; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)2171; GFX12-NEXT: v_add_co_ci_u32_e64 v3, null, s3, 0, s[0:1]2172; GFX12-NEXT: s_mov_b64 s[0:1], 02173; GFX12-NEXT: .LBB18_1: ; %atomicrmw.start2174; GFX12-NEXT: ; =>This Inner Loop Header: Depth=12175; GFX12-NEXT: s_wait_loadcnt 0x02176; GFX12-NEXT: v_max_u32_e32 v4, v5, v12177; GFX12-NEXT: global_wb scope:SCOPE_SYS2178; GFX12-NEXT: s_wait_storecnt 0x02179; GFX12-NEXT: global_atomic_cmpswap_b32 v0, v[2:3], v[4:5], off th:TH_ATOMIC_RETURN scope:SCOPE_SYS2180; GFX12-NEXT: s_wait_loadcnt 0x02181; GFX12-NEXT: global_inv scope:SCOPE_SYS2182; GFX12-NEXT: v_cmp_eq_u32_e32 vcc, v0, v52183; GFX12-NEXT: v_mov_b32_e32 v5, v02184; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)2185; GFX12-NEXT: s_or_b64 s[0:1], vcc, s[0:1]2186; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)2187; GFX12-NEXT: s_and_not1_b64 exec, exec, s[0:1]2188; GFX12-NEXT: s_cbranch_execnz .LBB18_12189; GFX12-NEXT: ; %bb.2: ; %atomicrmw.end2190; GFX12-NEXT: s_endpgm2191 %zext.offset = zext i32 %voffset to i642192 %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset2193 %unused = atomicrmw umax ptr addrspace(1) %gep0, i32 %data seq_cst2194 ret void2195}2196 2197define amdgpu_ps void @global_umax_saddr_i32_nortn_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, i32 %data) {2198; GFX9-LABEL: global_umax_saddr_i32_nortn_neg128:2199; GFX9: ; %bb.0:2200; GFX9-NEXT: global_load_dword v5, v0, s[2:3] offset:-1282201; GFX9-NEXT: v_mov_b32_e32 v3, s32202; GFX9-NEXT: v_add_co_u32_e32 v2, vcc, s2, v02203; GFX9-NEXT: v_addc_co_u32_e32 v3, vcc, 0, v3, vcc2204; GFX9-NEXT: s_mov_b64 s[0:1], 02205; GFX9-NEXT: .LBB19_1: ; %atomicrmw.start2206; GFX9-NEXT: ; =>This Inner Loop Header: Depth=12207; GFX9-NEXT: s_waitcnt vmcnt(0)2208; GFX9-NEXT: v_max_u32_e32 v4, v5, v12209; GFX9-NEXT: global_atomic_cmpswap v0, v[2:3], v[4:5], off offset:-128 glc2210; GFX9-NEXT: s_waitcnt vmcnt(0)2211; GFX9-NEXT: buffer_wbinvl12212; GFX9-NEXT: v_cmp_eq_u32_e32 vcc, v0, v52213; GFX9-NEXT: s_or_b64 s[0:1], vcc, s[0:1]2214; GFX9-NEXT: v_mov_b32_e32 v5, v02215; GFX9-NEXT: s_andn2_b64 exec, exec, s[0:1]2216; GFX9-NEXT: s_cbranch_execnz .LBB19_12217; GFX9-NEXT: ; %bb.2: ; %atomicrmw.end2218; GFX9-NEXT: s_endpgm2219;2220; GFX10-LABEL: global_umax_saddr_i32_nortn_neg128:2221; GFX10: ; %bb.0:2222; GFX10-NEXT: global_load_dword v5, v0, s[2:3] offset:-1282223; GFX10-NEXT: v_add_co_u32 v2, s[0:1], s2, v02224; GFX10-NEXT: v_add_co_ci_u32_e64 v3, s[0:1], s3, 0, s[0:1]2225; GFX10-NEXT: s_mov_b64 s[0:1], 02226; GFX10-NEXT: .LBB19_1: ; %atomicrmw.start2227; GFX10-NEXT: ; =>This Inner Loop Header: Depth=12228; GFX10-NEXT: s_waitcnt vmcnt(0)2229; GFX10-NEXT: v_max_u32_e32 v4, v5, v12230; GFX10-NEXT: global_atomic_cmpswap v0, v[2:3], v[4:5], off offset:-128 glc2231; GFX10-NEXT: s_waitcnt vmcnt(0)2232; GFX10-NEXT: buffer_gl1_inv2233; GFX10-NEXT: buffer_gl0_inv2234; GFX10-NEXT: v_cmp_eq_u32_e32 vcc, v0, v52235; GFX10-NEXT: v_mov_b32_e32 v5, v02236; GFX10-NEXT: s_or_b64 s[0:1], vcc, s[0:1]2237; GFX10-NEXT: s_andn2_b64 exec, exec, s[0:1]2238; GFX10-NEXT: s_cbranch_execnz .LBB19_12239; GFX10-NEXT: ; %bb.2: ; %atomicrmw.end2240; GFX10-NEXT: s_endpgm2241;2242; GFX11-LABEL: global_umax_saddr_i32_nortn_neg128:2243; GFX11: ; %bb.0:2244; GFX11-NEXT: global_load_b32 v5, v0, s[2:3] offset:-1282245; GFX11-NEXT: v_add_co_u32 v2, s[0:1], s2, v02246; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)2247; GFX11-NEXT: v_add_co_ci_u32_e64 v3, null, s3, 0, s[0:1]2248; GFX11-NEXT: s_mov_b64 s[0:1], 02249; GFX11-NEXT: s_waitcnt_depctr depctr_sa_sdst(0)2250; GFX11-NEXT: .LBB19_1: ; %atomicrmw.start2251; GFX11-NEXT: ; =>This Inner Loop Header: Depth=12252; GFX11-NEXT: s_waitcnt vmcnt(0)2253; GFX11-NEXT: v_max_u32_e32 v4, v5, v12254; GFX11-NEXT: global_atomic_cmpswap_b32 v0, v[2:3], v[4:5], off offset:-128 glc2255; GFX11-NEXT: s_waitcnt vmcnt(0)2256; GFX11-NEXT: buffer_gl1_inv2257; GFX11-NEXT: buffer_gl0_inv2258; GFX11-NEXT: v_cmp_eq_u32_e32 vcc, v0, v52259; GFX11-NEXT: v_mov_b32_e32 v5, v02260; GFX11-NEXT: s_or_b64 s[0:1], vcc, s[0:1]2261; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)2262; GFX11-NEXT: s_and_not1_b64 exec, exec, s[0:1]2263; GFX11-NEXT: s_cbranch_execnz .LBB19_12264; GFX11-NEXT: ; %bb.2: ; %atomicrmw.end2265; GFX11-NEXT: s_endpgm2266;2267; GFX12-LABEL: global_umax_saddr_i32_nortn_neg128:2268; GFX12: ; %bb.0:2269; GFX12-NEXT: global_load_b32 v5, v0, s[2:3] offset:-1282270; GFX12-NEXT: v_add_co_u32 v2, s[0:1], s2, v02271; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)2272; GFX12-NEXT: v_add_co_ci_u32_e64 v3, null, s3, 0, s[0:1]2273; GFX12-NEXT: s_mov_b64 s[0:1], 02274; GFX12-NEXT: .LBB19_1: ; %atomicrmw.start2275; GFX12-NEXT: ; =>This Inner Loop Header: Depth=12276; GFX12-NEXT: s_wait_loadcnt 0x02277; GFX12-NEXT: v_max_u32_e32 v4, v5, v12278; GFX12-NEXT: global_wb scope:SCOPE_SYS2279; GFX12-NEXT: s_wait_storecnt 0x02280; GFX12-NEXT: global_atomic_cmpswap_b32 v0, v[2:3], v[4:5], off offset:-128 th:TH_ATOMIC_RETURN scope:SCOPE_SYS2281; GFX12-NEXT: s_wait_loadcnt 0x02282; GFX12-NEXT: global_inv scope:SCOPE_SYS2283; GFX12-NEXT: v_cmp_eq_u32_e32 vcc, v0, v52284; GFX12-NEXT: v_mov_b32_e32 v5, v02285; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)2286; GFX12-NEXT: s_or_b64 s[0:1], vcc, s[0:1]2287; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)2288; GFX12-NEXT: s_and_not1_b64 exec, exec, s[0:1]2289; GFX12-NEXT: s_cbranch_execnz .LBB19_12290; GFX12-NEXT: ; %bb.2: ; %atomicrmw.end2291; GFX12-NEXT: s_endpgm2292 %zext.offset = zext i32 %voffset to i642293 %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset2294 %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -1282295 %unused = atomicrmw umax ptr addrspace(1) %gep1, i32 %data seq_cst2296 ret void2297}2298 2299define amdgpu_ps <2 x float> @global_umax_saddr_i64_rtn(ptr addrspace(1) inreg %sbase, i32 %voffset, i64 %data) {2300; GFX9-LABEL: global_umax_saddr_i64_rtn:2301; GFX9: ; %bb.0:2302; GFX9-NEXT: global_load_dwordx2 v[3:4], v0, s[2:3]2303; GFX9-NEXT: v_mov_b32_e32 v6, s32304; GFX9-NEXT: v_add_co_u32_e32 v5, vcc, s2, v02305; GFX9-NEXT: v_addc_co_u32_e32 v6, vcc, 0, v6, vcc2306; GFX9-NEXT: s_mov_b64 s[0:1], 02307; GFX9-NEXT: .LBB20_1: ; %atomicrmw.start2308; GFX9-NEXT: ; =>This Inner Loop Header: Depth=12309; GFX9-NEXT: s_waitcnt vmcnt(0)2310; GFX9-NEXT: v_mov_b32_e32 v10, v42311; GFX9-NEXT: v_mov_b32_e32 v9, v32312; GFX9-NEXT: v_cmp_gt_u64_e32 vcc, v[9:10], v[1:2]2313; GFX9-NEXT: v_cndmask_b32_e32 v8, v2, v10, vcc2314; GFX9-NEXT: v_cndmask_b32_e32 v7, v1, v9, vcc2315; GFX9-NEXT: global_atomic_cmpswap_x2 v[3:4], v[5:6], v[7:10], off glc2316; GFX9-NEXT: s_waitcnt vmcnt(0)2317; GFX9-NEXT: buffer_wbinvl12318; GFX9-NEXT: v_cmp_eq_u64_e32 vcc, v[3:4], v[9:10]2319; GFX9-NEXT: s_or_b64 s[0:1], vcc, s[0:1]2320; GFX9-NEXT: s_andn2_b64 exec, exec, s[0:1]2321; GFX9-NEXT: s_cbranch_execnz .LBB20_12322; GFX9-NEXT: ; %bb.2: ; %atomicrmw.end2323; GFX9-NEXT: s_or_b64 exec, exec, s[0:1]2324; GFX9-NEXT: v_mov_b32_e32 v0, v32325; GFX9-NEXT: v_mov_b32_e32 v1, v42326; GFX9-NEXT: ; return to shader part epilog2327;2328; GFX10-LABEL: global_umax_saddr_i64_rtn:2329; GFX10: ; %bb.0:2330; GFX10-NEXT: global_load_dwordx2 v[3:4], v0, s[2:3]2331; GFX10-NEXT: v_add_co_u32 v5, s[0:1], s2, v02332; GFX10-NEXT: v_add_co_ci_u32_e64 v6, s[0:1], s3, 0, s[0:1]2333; GFX10-NEXT: s_mov_b64 s[0:1], 02334; GFX10-NEXT: .LBB20_1: ; %atomicrmw.start2335; GFX10-NEXT: ; =>This Inner Loop Header: Depth=12336; GFX10-NEXT: s_waitcnt vmcnt(0)2337; GFX10-NEXT: v_mov_b32_e32 v10, v42338; GFX10-NEXT: v_mov_b32_e32 v9, v32339; GFX10-NEXT: v_cmp_gt_u64_e32 vcc, v[9:10], v[1:2]2340; GFX10-NEXT: v_cndmask_b32_e32 v8, v2, v10, vcc2341; GFX10-NEXT: v_cndmask_b32_e32 v7, v1, v9, vcc2342; GFX10-NEXT: global_atomic_cmpswap_x2 v[3:4], v[5:6], v[7:10], off glc2343; GFX10-NEXT: s_waitcnt vmcnt(0)2344; GFX10-NEXT: buffer_gl1_inv2345; GFX10-NEXT: buffer_gl0_inv2346; GFX10-NEXT: v_cmp_eq_u64_e32 vcc, v[3:4], v[9:10]2347; GFX10-NEXT: s_or_b64 s[0:1], vcc, s[0:1]2348; GFX10-NEXT: s_andn2_b64 exec, exec, s[0:1]2349; GFX10-NEXT: s_cbranch_execnz .LBB20_12350; GFX10-NEXT: ; %bb.2: ; %atomicrmw.end2351; GFX10-NEXT: s_or_b64 exec, exec, s[0:1]2352; GFX10-NEXT: v_mov_b32_e32 v0, v32353; GFX10-NEXT: v_mov_b32_e32 v1, v42354; GFX10-NEXT: ; return to shader part epilog2355;2356; GFX11-LABEL: global_umax_saddr_i64_rtn:2357; GFX11: ; %bb.0:2358; GFX11-NEXT: global_load_b64 v[3:4], v0, s[2:3]2359; GFX11-NEXT: v_add_co_u32 v5, s[0:1], s2, v02360; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)2361; GFX11-NEXT: v_add_co_ci_u32_e64 v6, null, s3, 0, s[0:1]2362; GFX11-NEXT: s_mov_b64 s[0:1], 02363; GFX11-NEXT: s_waitcnt_depctr depctr_sa_sdst(0)2364; GFX11-NEXT: .LBB20_1: ; %atomicrmw.start2365; GFX11-NEXT: ; =>This Inner Loop Header: Depth=12366; GFX11-NEXT: s_waitcnt vmcnt(0)2367; GFX11-NEXT: v_mov_b32_e32 v10, v42368; GFX11-NEXT: v_mov_b32_e32 v9, v32369; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)2370; GFX11-NEXT: v_cmp_gt_u64_e32 vcc, v[9:10], v[1:2]2371; GFX11-NEXT: v_cndmask_b32_e32 v8, v2, v10, vcc2372; GFX11-NEXT: v_cndmask_b32_e32 v7, v1, v9, vcc2373; GFX11-NEXT: global_atomic_cmpswap_b64 v[3:4], v[5:6], v[7:10], off glc2374; GFX11-NEXT: s_waitcnt vmcnt(0)2375; GFX11-NEXT: buffer_gl1_inv2376; GFX11-NEXT: buffer_gl0_inv2377; GFX11-NEXT: v_cmp_eq_u64_e32 vcc, v[3:4], v[9:10]2378; GFX11-NEXT: s_waitcnt_depctr depctr_va_vcc(0)2379; GFX11-NEXT: s_or_b64 s[0:1], vcc, s[0:1]2380; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)2381; GFX11-NEXT: s_and_not1_b64 exec, exec, s[0:1]2382; GFX11-NEXT: s_cbranch_execnz .LBB20_12383; GFX11-NEXT: ; %bb.2: ; %atomicrmw.end2384; GFX11-NEXT: s_or_b64 exec, exec, s[0:1]2385; GFX11-NEXT: v_mov_b32_e32 v0, v32386; GFX11-NEXT: v_mov_b32_e32 v1, v42387; GFX11-NEXT: ; return to shader part epilog2388;2389; GFX12-LABEL: global_umax_saddr_i64_rtn:2390; GFX12: ; %bb.0:2391; GFX12-NEXT: global_load_b64 v[3:4], v0, s[2:3]2392; GFX12-NEXT: v_add_co_u32 v5, s[0:1], s2, v02393; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)2394; GFX12-NEXT: v_add_co_ci_u32_e64 v6, null, s3, 0, s[0:1]2395; GFX12-NEXT: s_mov_b64 s[0:1], 02396; GFX12-NEXT: .LBB20_1: ; %atomicrmw.start2397; GFX12-NEXT: ; =>This Inner Loop Header: Depth=12398; GFX12-NEXT: s_wait_loadcnt 0x02399; GFX12-NEXT: v_mov_b32_e32 v10, v42400; GFX12-NEXT: v_mov_b32_e32 v9, v32401; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)2402; GFX12-NEXT: v_cmp_gt_u64_e32 vcc, v[9:10], v[1:2]2403; GFX12-NEXT: s_wait_alu depctr_va_vcc(0)2404; GFX12-NEXT: v_cndmask_b32_e32 v8, v2, v10, vcc2405; GFX12-NEXT: v_cndmask_b32_e32 v7, v1, v9, vcc2406; GFX12-NEXT: global_wb scope:SCOPE_SYS2407; GFX12-NEXT: s_wait_storecnt 0x02408; GFX12-NEXT: global_atomic_cmpswap_b64 v[3:4], v[5:6], v[7:10], off th:TH_ATOMIC_RETURN scope:SCOPE_SYS2409; GFX12-NEXT: s_wait_loadcnt 0x02410; GFX12-NEXT: global_inv scope:SCOPE_SYS2411; GFX12-NEXT: v_cmp_eq_u64_e32 vcc, v[3:4], v[9:10]2412; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)2413; GFX12-NEXT: s_or_b64 s[0:1], vcc, s[0:1]2414; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)2415; GFX12-NEXT: s_and_not1_b64 exec, exec, s[0:1]2416; GFX12-NEXT: s_cbranch_execnz .LBB20_12417; GFX12-NEXT: ; %bb.2: ; %atomicrmw.end2418; GFX12-NEXT: s_or_b64 exec, exec, s[0:1]2419; GFX12-NEXT: v_mov_b32_e32 v0, v32420; GFX12-NEXT: v_mov_b32_e32 v1, v42421; GFX12-NEXT: s_wait_loadcnt 0x02422; GFX12-NEXT: ; return to shader part epilog2423 %zext.offset = zext i32 %voffset to i642424 %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset2425 %rtn = atomicrmw umax ptr addrspace(1) %gep0, i64 %data seq_cst2426 %cast.rtn = bitcast i64 %rtn to <2 x float>2427 ret <2 x float> %cast.rtn2428}2429 2430define amdgpu_ps <2 x float> @global_umax_saddr_i64_rtn_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, i64 %data) {2431; GFX9-LABEL: global_umax_saddr_i64_rtn_neg128:2432; GFX9: ; %bb.0:2433; GFX9-NEXT: global_load_dwordx2 v[3:4], v0, s[2:3] offset:-1282434; GFX9-NEXT: v_mov_b32_e32 v6, s32435; GFX9-NEXT: v_add_co_u32_e32 v5, vcc, s2, v02436; GFX9-NEXT: v_addc_co_u32_e32 v6, vcc, 0, v6, vcc2437; GFX9-NEXT: s_mov_b64 s[0:1], 02438; GFX9-NEXT: .LBB21_1: ; %atomicrmw.start2439; GFX9-NEXT: ; =>This Inner Loop Header: Depth=12440; GFX9-NEXT: s_waitcnt vmcnt(0)2441; GFX9-NEXT: v_mov_b32_e32 v10, v42442; GFX9-NEXT: v_mov_b32_e32 v9, v32443; GFX9-NEXT: v_cmp_gt_u64_e32 vcc, v[9:10], v[1:2]2444; GFX9-NEXT: v_cndmask_b32_e32 v8, v2, v10, vcc2445; GFX9-NEXT: v_cndmask_b32_e32 v7, v1, v9, vcc2446; GFX9-NEXT: global_atomic_cmpswap_x2 v[3:4], v[5:6], v[7:10], off offset:-128 glc2447; GFX9-NEXT: s_waitcnt vmcnt(0)2448; GFX9-NEXT: buffer_wbinvl12449; GFX9-NEXT: v_cmp_eq_u64_e32 vcc, v[3:4], v[9:10]2450; GFX9-NEXT: s_or_b64 s[0:1], vcc, s[0:1]2451; GFX9-NEXT: s_andn2_b64 exec, exec, s[0:1]2452; GFX9-NEXT: s_cbranch_execnz .LBB21_12453; GFX9-NEXT: ; %bb.2: ; %atomicrmw.end2454; GFX9-NEXT: s_or_b64 exec, exec, s[0:1]2455; GFX9-NEXT: v_mov_b32_e32 v0, v32456; GFX9-NEXT: v_mov_b32_e32 v1, v42457; GFX9-NEXT: ; return to shader part epilog2458;2459; GFX10-LABEL: global_umax_saddr_i64_rtn_neg128:2460; GFX10: ; %bb.0:2461; GFX10-NEXT: global_load_dwordx2 v[3:4], v0, s[2:3] offset:-1282462; GFX10-NEXT: v_add_co_u32 v5, s[0:1], s2, v02463; GFX10-NEXT: v_add_co_ci_u32_e64 v6, s[0:1], s3, 0, s[0:1]2464; GFX10-NEXT: s_mov_b64 s[0:1], 02465; GFX10-NEXT: .LBB21_1: ; %atomicrmw.start2466; GFX10-NEXT: ; =>This Inner Loop Header: Depth=12467; GFX10-NEXT: s_waitcnt vmcnt(0)2468; GFX10-NEXT: v_mov_b32_e32 v10, v42469; GFX10-NEXT: v_mov_b32_e32 v9, v32470; GFX10-NEXT: v_cmp_gt_u64_e32 vcc, v[9:10], v[1:2]2471; GFX10-NEXT: v_cndmask_b32_e32 v8, v2, v10, vcc2472; GFX10-NEXT: v_cndmask_b32_e32 v7, v1, v9, vcc2473; GFX10-NEXT: global_atomic_cmpswap_x2 v[3:4], v[5:6], v[7:10], off offset:-128 glc2474; GFX10-NEXT: s_waitcnt vmcnt(0)2475; GFX10-NEXT: buffer_gl1_inv2476; GFX10-NEXT: buffer_gl0_inv2477; GFX10-NEXT: v_cmp_eq_u64_e32 vcc, v[3:4], v[9:10]2478; GFX10-NEXT: s_or_b64 s[0:1], vcc, s[0:1]2479; GFX10-NEXT: s_andn2_b64 exec, exec, s[0:1]2480; GFX10-NEXT: s_cbranch_execnz .LBB21_12481; GFX10-NEXT: ; %bb.2: ; %atomicrmw.end2482; GFX10-NEXT: s_or_b64 exec, exec, s[0:1]2483; GFX10-NEXT: v_mov_b32_e32 v0, v32484; GFX10-NEXT: v_mov_b32_e32 v1, v42485; GFX10-NEXT: ; return to shader part epilog2486;2487; GFX11-LABEL: global_umax_saddr_i64_rtn_neg128:2488; GFX11: ; %bb.0:2489; GFX11-NEXT: global_load_b64 v[3:4], v0, s[2:3] offset:-1282490; GFX11-NEXT: v_add_co_u32 v5, s[0:1], s2, v02491; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)2492; GFX11-NEXT: v_add_co_ci_u32_e64 v6, null, s3, 0, s[0:1]2493; GFX11-NEXT: s_mov_b64 s[0:1], 02494; GFX11-NEXT: s_waitcnt_depctr depctr_sa_sdst(0)2495; GFX11-NEXT: .LBB21_1: ; %atomicrmw.start2496; GFX11-NEXT: ; =>This Inner Loop Header: Depth=12497; GFX11-NEXT: s_waitcnt vmcnt(0)2498; GFX11-NEXT: v_mov_b32_e32 v10, v42499; GFX11-NEXT: v_mov_b32_e32 v9, v32500; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)2501; GFX11-NEXT: v_cmp_gt_u64_e32 vcc, v[9:10], v[1:2]2502; GFX11-NEXT: v_cndmask_b32_e32 v8, v2, v10, vcc2503; GFX11-NEXT: v_cndmask_b32_e32 v7, v1, v9, vcc2504; GFX11-NEXT: global_atomic_cmpswap_b64 v[3:4], v[5:6], v[7:10], off offset:-128 glc2505; GFX11-NEXT: s_waitcnt vmcnt(0)2506; GFX11-NEXT: buffer_gl1_inv2507; GFX11-NEXT: buffer_gl0_inv2508; GFX11-NEXT: v_cmp_eq_u64_e32 vcc, v[3:4], v[9:10]2509; GFX11-NEXT: s_waitcnt_depctr depctr_va_vcc(0)2510; GFX11-NEXT: s_or_b64 s[0:1], vcc, s[0:1]2511; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)2512; GFX11-NEXT: s_and_not1_b64 exec, exec, s[0:1]2513; GFX11-NEXT: s_cbranch_execnz .LBB21_12514; GFX11-NEXT: ; %bb.2: ; %atomicrmw.end2515; GFX11-NEXT: s_or_b64 exec, exec, s[0:1]2516; GFX11-NEXT: v_mov_b32_e32 v0, v32517; GFX11-NEXT: v_mov_b32_e32 v1, v42518; GFX11-NEXT: ; return to shader part epilog2519;2520; GFX12-LABEL: global_umax_saddr_i64_rtn_neg128:2521; GFX12: ; %bb.0:2522; GFX12-NEXT: global_load_b64 v[3:4], v0, s[2:3] offset:-1282523; GFX12-NEXT: v_add_co_u32 v5, s[0:1], s2, v02524; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)2525; GFX12-NEXT: v_add_co_ci_u32_e64 v6, null, s3, 0, s[0:1]2526; GFX12-NEXT: s_mov_b64 s[0:1], 02527; GFX12-NEXT: .LBB21_1: ; %atomicrmw.start2528; GFX12-NEXT: ; =>This Inner Loop Header: Depth=12529; GFX12-NEXT: s_wait_loadcnt 0x02530; GFX12-NEXT: v_mov_b32_e32 v10, v42531; GFX12-NEXT: v_mov_b32_e32 v9, v32532; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)2533; GFX12-NEXT: v_cmp_gt_u64_e32 vcc, v[9:10], v[1:2]2534; GFX12-NEXT: s_wait_alu depctr_va_vcc(0)2535; GFX12-NEXT: v_cndmask_b32_e32 v8, v2, v10, vcc2536; GFX12-NEXT: v_cndmask_b32_e32 v7, v1, v9, vcc2537; GFX12-NEXT: global_wb scope:SCOPE_SYS2538; GFX12-NEXT: s_wait_storecnt 0x02539; GFX12-NEXT: global_atomic_cmpswap_b64 v[3:4], v[5:6], v[7:10], off offset:-128 th:TH_ATOMIC_RETURN scope:SCOPE_SYS2540; GFX12-NEXT: s_wait_loadcnt 0x02541; GFX12-NEXT: global_inv scope:SCOPE_SYS2542; GFX12-NEXT: v_cmp_eq_u64_e32 vcc, v[3:4], v[9:10]2543; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)2544; GFX12-NEXT: s_or_b64 s[0:1], vcc, s[0:1]2545; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)2546; GFX12-NEXT: s_and_not1_b64 exec, exec, s[0:1]2547; GFX12-NEXT: s_cbranch_execnz .LBB21_12548; GFX12-NEXT: ; %bb.2: ; %atomicrmw.end2549; GFX12-NEXT: s_or_b64 exec, exec, s[0:1]2550; GFX12-NEXT: v_mov_b32_e32 v0, v32551; GFX12-NEXT: v_mov_b32_e32 v1, v42552; GFX12-NEXT: s_wait_loadcnt 0x02553; GFX12-NEXT: ; return to shader part epilog2554 %zext.offset = zext i32 %voffset to i642555 %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset2556 %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -1282557 %rtn = atomicrmw umax ptr addrspace(1) %gep1, i64 %data seq_cst2558 %cast.rtn = bitcast i64 %rtn to <2 x float>2559 ret <2 x float> %cast.rtn2560}2561 2562define amdgpu_ps void @global_umax_saddr_i64_nortn(ptr addrspace(1) inreg %sbase, i32 %voffset, i64 %data) {2563; GFX9-LABEL: global_umax_saddr_i64_nortn:2564; GFX9: ; %bb.0:2565; GFX9-NEXT: global_load_dwordx2 v[5:6], v0, s[2:3]2566; GFX9-NEXT: v_mov_b32_e32 v3, s32567; GFX9-NEXT: v_add_co_u32_e32 v7, vcc, s2, v02568; GFX9-NEXT: v_addc_co_u32_e32 v8, vcc, 0, v3, vcc2569; GFX9-NEXT: s_mov_b64 s[0:1], 02570; GFX9-NEXT: .LBB22_1: ; %atomicrmw.start2571; GFX9-NEXT: ; =>This Inner Loop Header: Depth=12572; GFX9-NEXT: s_waitcnt vmcnt(0)2573; GFX9-NEXT: v_cmp_gt_u64_e32 vcc, v[5:6], v[1:2]2574; GFX9-NEXT: v_cndmask_b32_e32 v4, v2, v6, vcc2575; GFX9-NEXT: v_cndmask_b32_e32 v3, v1, v5, vcc2576; GFX9-NEXT: global_atomic_cmpswap_x2 v[3:4], v[7:8], v[3:6], off glc2577; GFX9-NEXT: s_waitcnt vmcnt(0)2578; GFX9-NEXT: buffer_wbinvl12579; GFX9-NEXT: v_cmp_eq_u64_e32 vcc, v[3:4], v[5:6]2580; GFX9-NEXT: v_mov_b32_e32 v6, v42581; GFX9-NEXT: s_or_b64 s[0:1], vcc, s[0:1]2582; GFX9-NEXT: v_mov_b32_e32 v5, v32583; GFX9-NEXT: s_andn2_b64 exec, exec, s[0:1]2584; GFX9-NEXT: s_cbranch_execnz .LBB22_12585; GFX9-NEXT: ; %bb.2: ; %atomicrmw.end2586; GFX9-NEXT: s_endpgm2587;2588; GFX10-LABEL: global_umax_saddr_i64_nortn:2589; GFX10: ; %bb.0:2590; GFX10-NEXT: global_load_dwordx2 v[5:6], v0, s[2:3]2591; GFX10-NEXT: v_add_co_u32 v7, s[0:1], s2, v02592; GFX10-NEXT: v_add_co_ci_u32_e64 v8, s[0:1], s3, 0, s[0:1]2593; GFX10-NEXT: s_mov_b64 s[0:1], 02594; GFX10-NEXT: .LBB22_1: ; %atomicrmw.start2595; GFX10-NEXT: ; =>This Inner Loop Header: Depth=12596; GFX10-NEXT: s_waitcnt vmcnt(0)2597; GFX10-NEXT: v_cmp_gt_u64_e32 vcc, v[5:6], v[1:2]2598; GFX10-NEXT: v_cndmask_b32_e32 v4, v2, v6, vcc2599; GFX10-NEXT: v_cndmask_b32_e32 v3, v1, v5, vcc2600; GFX10-NEXT: global_atomic_cmpswap_x2 v[3:4], v[7:8], v[3:6], off glc2601; GFX10-NEXT: s_waitcnt vmcnt(0)2602; GFX10-NEXT: buffer_gl1_inv2603; GFX10-NEXT: buffer_gl0_inv2604; GFX10-NEXT: v_cmp_eq_u64_e32 vcc, v[3:4], v[5:6]2605; GFX10-NEXT: v_mov_b32_e32 v6, v42606; GFX10-NEXT: v_mov_b32_e32 v5, v32607; GFX10-NEXT: s_or_b64 s[0:1], vcc, s[0:1]2608; GFX10-NEXT: s_andn2_b64 exec, exec, s[0:1]2609; GFX10-NEXT: s_cbranch_execnz .LBB22_12610; GFX10-NEXT: ; %bb.2: ; %atomicrmw.end2611; GFX10-NEXT: s_endpgm2612;2613; GFX11-LABEL: global_umax_saddr_i64_nortn:2614; GFX11: ; %bb.0:2615; GFX11-NEXT: global_load_b64 v[5:6], v0, s[2:3]2616; GFX11-NEXT: v_add_co_u32 v7, s[0:1], s2, v02617; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)2618; GFX11-NEXT: v_add_co_ci_u32_e64 v8, null, s3, 0, s[0:1]2619; GFX11-NEXT: s_mov_b64 s[0:1], 02620; GFX11-NEXT: s_waitcnt_depctr depctr_sa_sdst(0)2621; GFX11-NEXT: .LBB22_1: ; %atomicrmw.start2622; GFX11-NEXT: ; =>This Inner Loop Header: Depth=12623; GFX11-NEXT: s_waitcnt vmcnt(0)2624; GFX11-NEXT: v_cmp_gt_u64_e32 vcc, v[5:6], v[1:2]2625; GFX11-NEXT: v_cndmask_b32_e32 v4, v2, v6, vcc2626; GFX11-NEXT: v_cndmask_b32_e32 v3, v1, v5, vcc2627; GFX11-NEXT: global_atomic_cmpswap_b64 v[3:4], v[7:8], v[3:6], off glc2628; GFX11-NEXT: s_waitcnt vmcnt(0)2629; GFX11-NEXT: buffer_gl1_inv2630; GFX11-NEXT: buffer_gl0_inv2631; GFX11-NEXT: v_cmp_eq_u64_e32 vcc, v[3:4], v[5:6]2632; GFX11-NEXT: s_waitcnt_depctr depctr_va_vcc(0)2633; GFX11-NEXT: v_mov_b32_e32 v6, v42634; GFX11-NEXT: v_mov_b32_e32 v5, v32635; GFX11-NEXT: s_or_b64 s[0:1], vcc, s[0:1]2636; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)2637; GFX11-NEXT: s_and_not1_b64 exec, exec, s[0:1]2638; GFX11-NEXT: s_cbranch_execnz .LBB22_12639; GFX11-NEXT: ; %bb.2: ; %atomicrmw.end2640; GFX11-NEXT: s_endpgm2641;2642; GFX12-LABEL: global_umax_saddr_i64_nortn:2643; GFX12: ; %bb.0:2644; GFX12-NEXT: global_load_b64 v[5:6], v0, s[2:3]2645; GFX12-NEXT: v_add_co_u32 v7, s[0:1], s2, v02646; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)2647; GFX12-NEXT: v_add_co_ci_u32_e64 v8, null, s3, 0, s[0:1]2648; GFX12-NEXT: s_mov_b64 s[0:1], 02649; GFX12-NEXT: .LBB22_1: ; %atomicrmw.start2650; GFX12-NEXT: ; =>This Inner Loop Header: Depth=12651; GFX12-NEXT: s_wait_loadcnt 0x02652; GFX12-NEXT: v_cmp_gt_u64_e32 vcc, v[5:6], v[1:2]2653; GFX12-NEXT: s_wait_alu depctr_va_vcc(0)2654; GFX12-NEXT: v_cndmask_b32_e32 v4, v2, v6, vcc2655; GFX12-NEXT: v_cndmask_b32_e32 v3, v1, v5, vcc2656; GFX12-NEXT: global_wb scope:SCOPE_SYS2657; GFX12-NEXT: s_wait_storecnt 0x02658; GFX12-NEXT: global_atomic_cmpswap_b64 v[3:4], v[7:8], v[3:6], off th:TH_ATOMIC_RETURN scope:SCOPE_SYS2659; GFX12-NEXT: s_wait_loadcnt 0x02660; GFX12-NEXT: global_inv scope:SCOPE_SYS2661; GFX12-NEXT: v_cmp_eq_u64_e32 vcc, v[3:4], v[5:6]2662; GFX12-NEXT: v_mov_b32_e32 v6, v42663; GFX12-NEXT: v_mov_b32_e32 v5, v32664; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)2665; GFX12-NEXT: s_or_b64 s[0:1], vcc, s[0:1]2666; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)2667; GFX12-NEXT: s_and_not1_b64 exec, exec, s[0:1]2668; GFX12-NEXT: s_cbranch_execnz .LBB22_12669; GFX12-NEXT: ; %bb.2: ; %atomicrmw.end2670; GFX12-NEXT: s_endpgm2671 %zext.offset = zext i32 %voffset to i642672 %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset2673 %unused = atomicrmw umax ptr addrspace(1) %gep0, i64 %data seq_cst2674 ret void2675}2676 2677define amdgpu_ps void @global_umax_saddr_i64_nortn_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, i64 %data) {2678; GFX9-LABEL: global_umax_saddr_i64_nortn_neg128:2679; GFX9: ; %bb.0:2680; GFX9-NEXT: global_load_dwordx2 v[5:6], v0, s[2:3] offset:-1282681; GFX9-NEXT: v_mov_b32_e32 v3, s32682; GFX9-NEXT: v_add_co_u32_e32 v7, vcc, s2, v02683; GFX9-NEXT: v_addc_co_u32_e32 v8, vcc, 0, v3, vcc2684; GFX9-NEXT: s_mov_b64 s[0:1], 02685; GFX9-NEXT: .LBB23_1: ; %atomicrmw.start2686; GFX9-NEXT: ; =>This Inner Loop Header: Depth=12687; GFX9-NEXT: s_waitcnt vmcnt(0)2688; GFX9-NEXT: v_cmp_gt_u64_e32 vcc, v[5:6], v[1:2]2689; GFX9-NEXT: v_cndmask_b32_e32 v4, v2, v6, vcc2690; GFX9-NEXT: v_cndmask_b32_e32 v3, v1, v5, vcc2691; GFX9-NEXT: global_atomic_cmpswap_x2 v[3:4], v[7:8], v[3:6], off offset:-128 glc2692; GFX9-NEXT: s_waitcnt vmcnt(0)2693; GFX9-NEXT: buffer_wbinvl12694; GFX9-NEXT: v_cmp_eq_u64_e32 vcc, v[3:4], v[5:6]2695; GFX9-NEXT: v_mov_b32_e32 v6, v42696; GFX9-NEXT: s_or_b64 s[0:1], vcc, s[0:1]2697; GFX9-NEXT: v_mov_b32_e32 v5, v32698; GFX9-NEXT: s_andn2_b64 exec, exec, s[0:1]2699; GFX9-NEXT: s_cbranch_execnz .LBB23_12700; GFX9-NEXT: ; %bb.2: ; %atomicrmw.end2701; GFX9-NEXT: s_endpgm2702;2703; GFX10-LABEL: global_umax_saddr_i64_nortn_neg128:2704; GFX10: ; %bb.0:2705; GFX10-NEXT: global_load_dwordx2 v[5:6], v0, s[2:3] offset:-1282706; GFX10-NEXT: v_add_co_u32 v7, s[0:1], s2, v02707; GFX10-NEXT: v_add_co_ci_u32_e64 v8, s[0:1], s3, 0, s[0:1]2708; GFX10-NEXT: s_mov_b64 s[0:1], 02709; GFX10-NEXT: .LBB23_1: ; %atomicrmw.start2710; GFX10-NEXT: ; =>This Inner Loop Header: Depth=12711; GFX10-NEXT: s_waitcnt vmcnt(0)2712; GFX10-NEXT: v_cmp_gt_u64_e32 vcc, v[5:6], v[1:2]2713; GFX10-NEXT: v_cndmask_b32_e32 v4, v2, v6, vcc2714; GFX10-NEXT: v_cndmask_b32_e32 v3, v1, v5, vcc2715; GFX10-NEXT: global_atomic_cmpswap_x2 v[3:4], v[7:8], v[3:6], off offset:-128 glc2716; GFX10-NEXT: s_waitcnt vmcnt(0)2717; GFX10-NEXT: buffer_gl1_inv2718; GFX10-NEXT: buffer_gl0_inv2719; GFX10-NEXT: v_cmp_eq_u64_e32 vcc, v[3:4], v[5:6]2720; GFX10-NEXT: v_mov_b32_e32 v6, v42721; GFX10-NEXT: v_mov_b32_e32 v5, v32722; GFX10-NEXT: s_or_b64 s[0:1], vcc, s[0:1]2723; GFX10-NEXT: s_andn2_b64 exec, exec, s[0:1]2724; GFX10-NEXT: s_cbranch_execnz .LBB23_12725; GFX10-NEXT: ; %bb.2: ; %atomicrmw.end2726; GFX10-NEXT: s_endpgm2727;2728; GFX11-LABEL: global_umax_saddr_i64_nortn_neg128:2729; GFX11: ; %bb.0:2730; GFX11-NEXT: global_load_b64 v[5:6], v0, s[2:3] offset:-1282731; GFX11-NEXT: v_add_co_u32 v7, s[0:1], s2, v02732; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)2733; GFX11-NEXT: v_add_co_ci_u32_e64 v8, null, s3, 0, s[0:1]2734; GFX11-NEXT: s_mov_b64 s[0:1], 02735; GFX11-NEXT: s_waitcnt_depctr depctr_sa_sdst(0)2736; GFX11-NEXT: .LBB23_1: ; %atomicrmw.start2737; GFX11-NEXT: ; =>This Inner Loop Header: Depth=12738; GFX11-NEXT: s_waitcnt vmcnt(0)2739; GFX11-NEXT: v_cmp_gt_u64_e32 vcc, v[5:6], v[1:2]2740; GFX11-NEXT: v_cndmask_b32_e32 v4, v2, v6, vcc2741; GFX11-NEXT: v_cndmask_b32_e32 v3, v1, v5, vcc2742; GFX11-NEXT: global_atomic_cmpswap_b64 v[3:4], v[7:8], v[3:6], off offset:-128 glc2743; GFX11-NEXT: s_waitcnt vmcnt(0)2744; GFX11-NEXT: buffer_gl1_inv2745; GFX11-NEXT: buffer_gl0_inv2746; GFX11-NEXT: v_cmp_eq_u64_e32 vcc, v[3:4], v[5:6]2747; GFX11-NEXT: s_waitcnt_depctr depctr_va_vcc(0)2748; GFX11-NEXT: v_mov_b32_e32 v6, v42749; GFX11-NEXT: v_mov_b32_e32 v5, v32750; GFX11-NEXT: s_or_b64 s[0:1], vcc, s[0:1]2751; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)2752; GFX11-NEXT: s_and_not1_b64 exec, exec, s[0:1]2753; GFX11-NEXT: s_cbranch_execnz .LBB23_12754; GFX11-NEXT: ; %bb.2: ; %atomicrmw.end2755; GFX11-NEXT: s_endpgm2756;2757; GFX12-LABEL: global_umax_saddr_i64_nortn_neg128:2758; GFX12: ; %bb.0:2759; GFX12-NEXT: global_load_b64 v[5:6], v0, s[2:3] offset:-1282760; GFX12-NEXT: v_add_co_u32 v7, s[0:1], s2, v02761; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)2762; GFX12-NEXT: v_add_co_ci_u32_e64 v8, null, s3, 0, s[0:1]2763; GFX12-NEXT: s_mov_b64 s[0:1], 02764; GFX12-NEXT: .LBB23_1: ; %atomicrmw.start2765; GFX12-NEXT: ; =>This Inner Loop Header: Depth=12766; GFX12-NEXT: s_wait_loadcnt 0x02767; GFX12-NEXT: v_cmp_gt_u64_e32 vcc, v[5:6], v[1:2]2768; GFX12-NEXT: s_wait_alu depctr_va_vcc(0)2769; GFX12-NEXT: v_cndmask_b32_e32 v4, v2, v6, vcc2770; GFX12-NEXT: v_cndmask_b32_e32 v3, v1, v5, vcc2771; GFX12-NEXT: global_wb scope:SCOPE_SYS2772; GFX12-NEXT: s_wait_storecnt 0x02773; GFX12-NEXT: global_atomic_cmpswap_b64 v[3:4], v[7:8], v[3:6], off offset:-128 th:TH_ATOMIC_RETURN scope:SCOPE_SYS2774; GFX12-NEXT: s_wait_loadcnt 0x02775; GFX12-NEXT: global_inv scope:SCOPE_SYS2776; GFX12-NEXT: v_cmp_eq_u64_e32 vcc, v[3:4], v[5:6]2777; GFX12-NEXT: v_mov_b32_e32 v6, v42778; GFX12-NEXT: v_mov_b32_e32 v5, v32779; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)2780; GFX12-NEXT: s_or_b64 s[0:1], vcc, s[0:1]2781; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)2782; GFX12-NEXT: s_and_not1_b64 exec, exec, s[0:1]2783; GFX12-NEXT: s_cbranch_execnz .LBB23_12784; GFX12-NEXT: ; %bb.2: ; %atomicrmw.end2785; GFX12-NEXT: s_endpgm2786 %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 %unused = atomicrmw umax ptr addrspace(1) %gep1, i64 %data seq_cst2790 ret void2791}2792 2793; --------------------------------------------------------------------------------2794; atomicrmw umin2795; --------------------------------------------------------------------------------2796 2797define amdgpu_ps float @global_umin_saddr_i32_rtn(ptr addrspace(1) inreg %sbase, i32 %voffset, i32 %data) {2798; GFX9-LABEL: global_umin_saddr_i32_rtn:2799; GFX9: ; %bb.0:2800; GFX9-NEXT: v_mov_b32_e32 v2, v02801; GFX9-NEXT: global_load_dword v0, v0, s[2:3]2802; GFX9-NEXT: v_mov_b32_e32 v3, s32803; GFX9-NEXT: v_add_co_u32_e32 v2, vcc, s2, v22804; GFX9-NEXT: v_addc_co_u32_e32 v3, vcc, 0, v3, vcc2805; GFX9-NEXT: s_mov_b64 s[0:1], 02806; GFX9-NEXT: .LBB24_1: ; %atomicrmw.start2807; GFX9-NEXT: ; =>This Inner Loop Header: Depth=12808; GFX9-NEXT: s_waitcnt vmcnt(0)2809; GFX9-NEXT: v_mov_b32_e32 v5, v02810; GFX9-NEXT: v_min_u32_e32 v4, v5, v12811; GFX9-NEXT: global_atomic_cmpswap v0, v[2:3], v[4:5], off glc2812; GFX9-NEXT: s_waitcnt vmcnt(0)2813; GFX9-NEXT: buffer_wbinvl12814; GFX9-NEXT: v_cmp_eq_u32_e32 vcc, v0, v52815; GFX9-NEXT: s_or_b64 s[0:1], vcc, s[0:1]2816; GFX9-NEXT: s_andn2_b64 exec, exec, s[0:1]2817; GFX9-NEXT: s_cbranch_execnz .LBB24_12818; GFX9-NEXT: ; %bb.2: ; %atomicrmw.end2819; GFX9-NEXT: s_or_b64 exec, exec, s[0:1]2820; GFX9-NEXT: ; return to shader part epilog2821;2822; GFX10-LABEL: global_umin_saddr_i32_rtn:2823; GFX10: ; %bb.0:2824; GFX10-NEXT: v_mov_b32_e32 v2, v02825; GFX10-NEXT: global_load_dword v0, v0, s[2:3]2826; GFX10-NEXT: v_add_co_u32 v2, s[0:1], s2, v22827; GFX10-NEXT: v_add_co_ci_u32_e64 v3, s[0:1], s3, 0, s[0:1]2828; GFX10-NEXT: s_mov_b64 s[0:1], 02829; GFX10-NEXT: .LBB24_1: ; %atomicrmw.start2830; GFX10-NEXT: ; =>This Inner Loop Header: Depth=12831; GFX10-NEXT: s_waitcnt vmcnt(0)2832; GFX10-NEXT: v_mov_b32_e32 v5, v02833; GFX10-NEXT: v_min_u32_e32 v4, v5, v12834; GFX10-NEXT: global_atomic_cmpswap v0, v[2:3], v[4:5], off glc2835; GFX10-NEXT: s_waitcnt vmcnt(0)2836; GFX10-NEXT: buffer_gl1_inv2837; GFX10-NEXT: buffer_gl0_inv2838; GFX10-NEXT: v_cmp_eq_u32_e32 vcc, v0, v52839; GFX10-NEXT: s_or_b64 s[0:1], vcc, s[0:1]2840; GFX10-NEXT: s_andn2_b64 exec, exec, s[0:1]2841; GFX10-NEXT: s_cbranch_execnz .LBB24_12842; GFX10-NEXT: ; %bb.2: ; %atomicrmw.end2843; GFX10-NEXT: s_or_b64 exec, exec, s[0:1]2844; GFX10-NEXT: ; return to shader part epilog2845;2846; GFX11-LABEL: global_umin_saddr_i32_rtn:2847; GFX11: ; %bb.0:2848; GFX11-NEXT: v_mov_b32_e32 v2, v02849; GFX11-NEXT: global_load_b32 v0, v0, s[2:3]2850; GFX11-NEXT: v_add_co_u32 v2, s[0:1], s2, v22851; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)2852; GFX11-NEXT: v_add_co_ci_u32_e64 v3, null, s3, 0, s[0:1]2853; GFX11-NEXT: s_mov_b64 s[0:1], 02854; GFX11-NEXT: s_waitcnt_depctr depctr_sa_sdst(0)2855; GFX11-NEXT: .LBB24_1: ; %atomicrmw.start2856; GFX11-NEXT: ; =>This Inner Loop Header: Depth=12857; GFX11-NEXT: s_waitcnt vmcnt(0)2858; GFX11-NEXT: v_mov_b32_e32 v5, v02859; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)2860; GFX11-NEXT: v_min_u32_e32 v4, v5, v12861; GFX11-NEXT: global_atomic_cmpswap_b32 v0, v[2:3], v[4:5], off glc2862; GFX11-NEXT: s_waitcnt vmcnt(0)2863; GFX11-NEXT: buffer_gl1_inv2864; GFX11-NEXT: buffer_gl0_inv2865; GFX11-NEXT: v_cmp_eq_u32_e32 vcc, v0, v52866; GFX11-NEXT: s_or_b64 s[0:1], vcc, s[0:1]2867; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)2868; GFX11-NEXT: s_and_not1_b64 exec, exec, s[0:1]2869; GFX11-NEXT: s_cbranch_execnz .LBB24_12870; GFX11-NEXT: ; %bb.2: ; %atomicrmw.end2871; GFX11-NEXT: s_or_b64 exec, exec, s[0:1]2872; GFX11-NEXT: ; return to shader part epilog2873;2874; GFX12-LABEL: global_umin_saddr_i32_rtn:2875; GFX12: ; %bb.0:2876; GFX12-NEXT: v_mov_b32_e32 v2, v02877; GFX12-NEXT: global_load_b32 v0, v0, s[2:3]2878; GFX12-NEXT: v_add_co_u32 v2, s[0:1], s2, v22879; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)2880; GFX12-NEXT: v_add_co_ci_u32_e64 v3, null, s3, 0, s[0:1]2881; GFX12-NEXT: s_mov_b64 s[0:1], 02882; GFX12-NEXT: .LBB24_1: ; %atomicrmw.start2883; GFX12-NEXT: ; =>This Inner Loop Header: Depth=12884; GFX12-NEXT: s_wait_loadcnt 0x02885; GFX12-NEXT: v_mov_b32_e32 v5, v02886; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)2887; GFX12-NEXT: v_min_u32_e32 v4, v5, v12888; GFX12-NEXT: global_wb scope:SCOPE_SYS2889; GFX12-NEXT: s_wait_storecnt 0x02890; GFX12-NEXT: global_atomic_cmpswap_b32 v0, v[2:3], v[4:5], off th:TH_ATOMIC_RETURN scope:SCOPE_SYS2891; GFX12-NEXT: s_wait_loadcnt 0x02892; GFX12-NEXT: global_inv scope:SCOPE_SYS2893; GFX12-NEXT: v_cmp_eq_u32_e32 vcc, v0, v52894; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)2895; GFX12-NEXT: s_or_b64 s[0:1], vcc, s[0:1]2896; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)2897; GFX12-NEXT: s_and_not1_b64 exec, exec, s[0:1]2898; GFX12-NEXT: s_cbranch_execnz .LBB24_12899; GFX12-NEXT: ; %bb.2: ; %atomicrmw.end2900; GFX12-NEXT: s_or_b64 exec, exec, s[0:1]2901; GFX12-NEXT: s_wait_loadcnt 0x02902; GFX12-NEXT: ; return to shader part epilog2903 %zext.offset = zext i32 %voffset to i642904 %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset2905 %rtn = atomicrmw umin ptr addrspace(1) %gep0, i32 %data seq_cst2906 %cast.rtn = bitcast i32 %rtn to float2907 ret float %cast.rtn2908}2909 2910define amdgpu_ps float @global_umin_saddr_i32_rtn_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, i32 %data) {2911; GFX9-LABEL: global_umin_saddr_i32_rtn_neg128:2912; GFX9: ; %bb.0:2913; GFX9-NEXT: v_mov_b32_e32 v2, v02914; GFX9-NEXT: global_load_dword v0, v0, s[2:3] offset:-1282915; GFX9-NEXT: v_mov_b32_e32 v3, s32916; GFX9-NEXT: v_add_co_u32_e32 v2, vcc, s2, v22917; GFX9-NEXT: v_addc_co_u32_e32 v3, vcc, 0, v3, vcc2918; GFX9-NEXT: s_mov_b64 s[0:1], 02919; GFX9-NEXT: .LBB25_1: ; %atomicrmw.start2920; GFX9-NEXT: ; =>This Inner Loop Header: Depth=12921; GFX9-NEXT: s_waitcnt vmcnt(0)2922; GFX9-NEXT: v_mov_b32_e32 v5, v02923; GFX9-NEXT: v_min_u32_e32 v4, v5, v12924; GFX9-NEXT: global_atomic_cmpswap v0, v[2:3], v[4:5], off offset:-128 glc2925; GFX9-NEXT: s_waitcnt vmcnt(0)2926; GFX9-NEXT: buffer_wbinvl12927; GFX9-NEXT: v_cmp_eq_u32_e32 vcc, v0, v52928; GFX9-NEXT: s_or_b64 s[0:1], vcc, s[0:1]2929; GFX9-NEXT: s_andn2_b64 exec, exec, s[0:1]2930; GFX9-NEXT: s_cbranch_execnz .LBB25_12931; GFX9-NEXT: ; %bb.2: ; %atomicrmw.end2932; GFX9-NEXT: s_or_b64 exec, exec, s[0:1]2933; GFX9-NEXT: ; return to shader part epilog2934;2935; GFX10-LABEL: global_umin_saddr_i32_rtn_neg128:2936; GFX10: ; %bb.0:2937; GFX10-NEXT: v_mov_b32_e32 v2, v02938; GFX10-NEXT: global_load_dword v0, v0, s[2:3] offset:-1282939; GFX10-NEXT: v_add_co_u32 v2, s[0:1], s2, v22940; GFX10-NEXT: v_add_co_ci_u32_e64 v3, s[0:1], s3, 0, s[0:1]2941; GFX10-NEXT: s_mov_b64 s[0:1], 02942; GFX10-NEXT: .LBB25_1: ; %atomicrmw.start2943; GFX10-NEXT: ; =>This Inner Loop Header: Depth=12944; GFX10-NEXT: s_waitcnt vmcnt(0)2945; GFX10-NEXT: v_mov_b32_e32 v5, v02946; GFX10-NEXT: v_min_u32_e32 v4, v5, v12947; GFX10-NEXT: global_atomic_cmpswap v0, v[2:3], v[4:5], off offset:-128 glc2948; GFX10-NEXT: s_waitcnt vmcnt(0)2949; GFX10-NEXT: buffer_gl1_inv2950; GFX10-NEXT: buffer_gl0_inv2951; GFX10-NEXT: v_cmp_eq_u32_e32 vcc, v0, v52952; GFX10-NEXT: s_or_b64 s[0:1], vcc, s[0:1]2953; GFX10-NEXT: s_andn2_b64 exec, exec, s[0:1]2954; GFX10-NEXT: s_cbranch_execnz .LBB25_12955; GFX10-NEXT: ; %bb.2: ; %atomicrmw.end2956; GFX10-NEXT: s_or_b64 exec, exec, s[0:1]2957; GFX10-NEXT: ; return to shader part epilog2958;2959; GFX11-LABEL: global_umin_saddr_i32_rtn_neg128:2960; GFX11: ; %bb.0:2961; GFX11-NEXT: v_mov_b32_e32 v2, v02962; GFX11-NEXT: global_load_b32 v0, v0, s[2:3] offset:-1282963; GFX11-NEXT: v_add_co_u32 v2, s[0:1], s2, v22964; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)2965; GFX11-NEXT: v_add_co_ci_u32_e64 v3, null, s3, 0, s[0:1]2966; GFX11-NEXT: s_mov_b64 s[0:1], 02967; GFX11-NEXT: s_waitcnt_depctr depctr_sa_sdst(0)2968; GFX11-NEXT: .LBB25_1: ; %atomicrmw.start2969; GFX11-NEXT: ; =>This Inner Loop Header: Depth=12970; GFX11-NEXT: s_waitcnt vmcnt(0)2971; GFX11-NEXT: v_mov_b32_e32 v5, v02972; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)2973; GFX11-NEXT: v_min_u32_e32 v4, v5, v12974; GFX11-NEXT: global_atomic_cmpswap_b32 v0, v[2:3], v[4:5], off offset:-128 glc2975; GFX11-NEXT: s_waitcnt vmcnt(0)2976; GFX11-NEXT: buffer_gl1_inv2977; GFX11-NEXT: buffer_gl0_inv2978; GFX11-NEXT: v_cmp_eq_u32_e32 vcc, v0, v52979; GFX11-NEXT: s_or_b64 s[0:1], vcc, s[0:1]2980; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)2981; GFX11-NEXT: s_and_not1_b64 exec, exec, s[0:1]2982; GFX11-NEXT: s_cbranch_execnz .LBB25_12983; GFX11-NEXT: ; %bb.2: ; %atomicrmw.end2984; GFX11-NEXT: s_or_b64 exec, exec, s[0:1]2985; GFX11-NEXT: ; return to shader part epilog2986;2987; GFX12-LABEL: global_umin_saddr_i32_rtn_neg128:2988; GFX12: ; %bb.0:2989; GFX12-NEXT: v_mov_b32_e32 v2, v02990; GFX12-NEXT: global_load_b32 v0, v0, s[2:3] offset:-1282991; GFX12-NEXT: v_add_co_u32 v2, s[0:1], s2, v22992; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)2993; GFX12-NEXT: v_add_co_ci_u32_e64 v3, null, s3, 0, s[0:1]2994; GFX12-NEXT: s_mov_b64 s[0:1], 02995; GFX12-NEXT: .LBB25_1: ; %atomicrmw.start2996; GFX12-NEXT: ; =>This Inner Loop Header: Depth=12997; GFX12-NEXT: s_wait_loadcnt 0x02998; GFX12-NEXT: v_mov_b32_e32 v5, v02999; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)3000; GFX12-NEXT: v_min_u32_e32 v4, v5, v13001; GFX12-NEXT: global_wb scope:SCOPE_SYS3002; GFX12-NEXT: s_wait_storecnt 0x03003; GFX12-NEXT: global_atomic_cmpswap_b32 v0, v[2:3], v[4:5], off offset:-128 th:TH_ATOMIC_RETURN scope:SCOPE_SYS3004; GFX12-NEXT: s_wait_loadcnt 0x03005; GFX12-NEXT: global_inv scope:SCOPE_SYS3006; GFX12-NEXT: v_cmp_eq_u32_e32 vcc, v0, v53007; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)3008; GFX12-NEXT: s_or_b64 s[0:1], vcc, s[0:1]3009; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)3010; GFX12-NEXT: s_and_not1_b64 exec, exec, s[0:1]3011; GFX12-NEXT: s_cbranch_execnz .LBB25_13012; GFX12-NEXT: ; %bb.2: ; %atomicrmw.end3013; GFX12-NEXT: s_or_b64 exec, exec, s[0:1]3014; GFX12-NEXT: s_wait_loadcnt 0x03015; GFX12-NEXT: ; return to shader part epilog3016 %zext.offset = zext i32 %voffset to i643017 %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset3018 %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -1283019 %rtn = atomicrmw umin ptr addrspace(1) %gep1, i32 %data seq_cst3020 %cast.rtn = bitcast i32 %rtn to float3021 ret float %cast.rtn3022}3023 3024define amdgpu_ps void @global_umin_saddr_i32_nortn(ptr addrspace(1) inreg %sbase, i32 %voffset, i32 %data) {3025; GFX9-LABEL: global_umin_saddr_i32_nortn:3026; GFX9: ; %bb.0:3027; GFX9-NEXT: global_load_dword v5, v0, s[2:3]3028; GFX9-NEXT: v_mov_b32_e32 v3, s33029; GFX9-NEXT: v_add_co_u32_e32 v2, vcc, s2, v03030; GFX9-NEXT: v_addc_co_u32_e32 v3, vcc, 0, v3, vcc3031; GFX9-NEXT: s_mov_b64 s[0:1], 03032; GFX9-NEXT: .LBB26_1: ; %atomicrmw.start3033; GFX9-NEXT: ; =>This Inner Loop Header: Depth=13034; GFX9-NEXT: s_waitcnt vmcnt(0)3035; GFX9-NEXT: v_min_u32_e32 v4, v5, v13036; GFX9-NEXT: global_atomic_cmpswap v0, v[2:3], v[4:5], off glc3037; GFX9-NEXT: s_waitcnt vmcnt(0)3038; GFX9-NEXT: buffer_wbinvl13039; GFX9-NEXT: v_cmp_eq_u32_e32 vcc, v0, v53040; GFX9-NEXT: s_or_b64 s[0:1], vcc, s[0:1]3041; GFX9-NEXT: v_mov_b32_e32 v5, v03042; GFX9-NEXT: s_andn2_b64 exec, exec, s[0:1]3043; GFX9-NEXT: s_cbranch_execnz .LBB26_13044; GFX9-NEXT: ; %bb.2: ; %atomicrmw.end3045; GFX9-NEXT: s_endpgm3046;3047; GFX10-LABEL: global_umin_saddr_i32_nortn:3048; GFX10: ; %bb.0:3049; GFX10-NEXT: global_load_dword v5, v0, s[2:3]3050; GFX10-NEXT: v_add_co_u32 v2, s[0:1], s2, v03051; GFX10-NEXT: v_add_co_ci_u32_e64 v3, s[0:1], s3, 0, s[0:1]3052; GFX10-NEXT: s_mov_b64 s[0:1], 03053; GFX10-NEXT: .LBB26_1: ; %atomicrmw.start3054; GFX10-NEXT: ; =>This Inner Loop Header: Depth=13055; GFX10-NEXT: s_waitcnt vmcnt(0)3056; GFX10-NEXT: v_min_u32_e32 v4, v5, v13057; GFX10-NEXT: global_atomic_cmpswap v0, v[2:3], v[4:5], off glc3058; GFX10-NEXT: s_waitcnt vmcnt(0)3059; GFX10-NEXT: buffer_gl1_inv3060; GFX10-NEXT: buffer_gl0_inv3061; GFX10-NEXT: v_cmp_eq_u32_e32 vcc, v0, v53062; GFX10-NEXT: v_mov_b32_e32 v5, v03063; GFX10-NEXT: s_or_b64 s[0:1], vcc, s[0:1]3064; GFX10-NEXT: s_andn2_b64 exec, exec, s[0:1]3065; GFX10-NEXT: s_cbranch_execnz .LBB26_13066; GFX10-NEXT: ; %bb.2: ; %atomicrmw.end3067; GFX10-NEXT: s_endpgm3068;3069; GFX11-LABEL: global_umin_saddr_i32_nortn:3070; GFX11: ; %bb.0:3071; GFX11-NEXT: global_load_b32 v5, v0, s[2:3]3072; GFX11-NEXT: v_add_co_u32 v2, s[0:1], s2, v03073; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)3074; GFX11-NEXT: v_add_co_ci_u32_e64 v3, null, s3, 0, s[0:1]3075; GFX11-NEXT: s_mov_b64 s[0:1], 03076; GFX11-NEXT: s_waitcnt_depctr depctr_sa_sdst(0)3077; GFX11-NEXT: .LBB26_1: ; %atomicrmw.start3078; GFX11-NEXT: ; =>This Inner Loop Header: Depth=13079; GFX11-NEXT: s_waitcnt vmcnt(0)3080; GFX11-NEXT: v_min_u32_e32 v4, v5, v13081; GFX11-NEXT: global_atomic_cmpswap_b32 v0, v[2:3], v[4:5], off glc3082; GFX11-NEXT: s_waitcnt vmcnt(0)3083; GFX11-NEXT: buffer_gl1_inv3084; GFX11-NEXT: buffer_gl0_inv3085; GFX11-NEXT: v_cmp_eq_u32_e32 vcc, v0, v53086; GFX11-NEXT: v_mov_b32_e32 v5, v03087; GFX11-NEXT: s_or_b64 s[0:1], vcc, s[0:1]3088; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)3089; GFX11-NEXT: s_and_not1_b64 exec, exec, s[0:1]3090; GFX11-NEXT: s_cbranch_execnz .LBB26_13091; GFX11-NEXT: ; %bb.2: ; %atomicrmw.end3092; GFX11-NEXT: s_endpgm3093;3094; GFX12-LABEL: global_umin_saddr_i32_nortn:3095; GFX12: ; %bb.0:3096; GFX12-NEXT: global_load_b32 v5, v0, s[2:3]3097; GFX12-NEXT: v_add_co_u32 v2, s[0:1], s2, v03098; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)3099; GFX12-NEXT: v_add_co_ci_u32_e64 v3, null, s3, 0, s[0:1]3100; GFX12-NEXT: s_mov_b64 s[0:1], 03101; GFX12-NEXT: .LBB26_1: ; %atomicrmw.start3102; GFX12-NEXT: ; =>This Inner Loop Header: Depth=13103; GFX12-NEXT: s_wait_loadcnt 0x03104; GFX12-NEXT: v_min_u32_e32 v4, v5, v13105; GFX12-NEXT: global_wb scope:SCOPE_SYS3106; GFX12-NEXT: s_wait_storecnt 0x03107; GFX12-NEXT: global_atomic_cmpswap_b32 v0, v[2:3], v[4:5], off th:TH_ATOMIC_RETURN scope:SCOPE_SYS3108; GFX12-NEXT: s_wait_loadcnt 0x03109; GFX12-NEXT: global_inv scope:SCOPE_SYS3110; GFX12-NEXT: v_cmp_eq_u32_e32 vcc, v0, v53111; GFX12-NEXT: v_mov_b32_e32 v5, v03112; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)3113; GFX12-NEXT: s_or_b64 s[0:1], vcc, s[0:1]3114; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)3115; GFX12-NEXT: s_and_not1_b64 exec, exec, s[0:1]3116; GFX12-NEXT: s_cbranch_execnz .LBB26_13117; GFX12-NEXT: ; %bb.2: ; %atomicrmw.end3118; GFX12-NEXT: s_endpgm3119 %zext.offset = zext i32 %voffset to i643120 %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset3121 %unused = atomicrmw umin ptr addrspace(1) %gep0, i32 %data seq_cst3122 ret void3123}3124 3125define amdgpu_ps void @global_umin_saddr_i32_nortn_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, i32 %data) {3126; GFX9-LABEL: global_umin_saddr_i32_nortn_neg128:3127; GFX9: ; %bb.0:3128; GFX9-NEXT: global_load_dword v5, v0, s[2:3] offset:-1283129; GFX9-NEXT: v_mov_b32_e32 v3, s33130; GFX9-NEXT: v_add_co_u32_e32 v2, vcc, s2, v03131; GFX9-NEXT: v_addc_co_u32_e32 v3, vcc, 0, v3, vcc3132; GFX9-NEXT: s_mov_b64 s[0:1], 03133; GFX9-NEXT: .LBB27_1: ; %atomicrmw.start3134; GFX9-NEXT: ; =>This Inner Loop Header: Depth=13135; GFX9-NEXT: s_waitcnt vmcnt(0)3136; GFX9-NEXT: v_min_u32_e32 v4, v5, v13137; GFX9-NEXT: global_atomic_cmpswap v0, v[2:3], v[4:5], off offset:-128 glc3138; GFX9-NEXT: s_waitcnt vmcnt(0)3139; GFX9-NEXT: buffer_wbinvl13140; GFX9-NEXT: v_cmp_eq_u32_e32 vcc, v0, v53141; GFX9-NEXT: s_or_b64 s[0:1], vcc, s[0:1]3142; GFX9-NEXT: v_mov_b32_e32 v5, v03143; GFX9-NEXT: s_andn2_b64 exec, exec, s[0:1]3144; GFX9-NEXT: s_cbranch_execnz .LBB27_13145; GFX9-NEXT: ; %bb.2: ; %atomicrmw.end3146; GFX9-NEXT: s_endpgm3147;3148; GFX10-LABEL: global_umin_saddr_i32_nortn_neg128:3149; GFX10: ; %bb.0:3150; GFX10-NEXT: global_load_dword v5, v0, s[2:3] offset:-1283151; GFX10-NEXT: v_add_co_u32 v2, s[0:1], s2, v03152; GFX10-NEXT: v_add_co_ci_u32_e64 v3, s[0:1], s3, 0, s[0:1]3153; GFX10-NEXT: s_mov_b64 s[0:1], 03154; GFX10-NEXT: .LBB27_1: ; %atomicrmw.start3155; GFX10-NEXT: ; =>This Inner Loop Header: Depth=13156; GFX10-NEXT: s_waitcnt vmcnt(0)3157; GFX10-NEXT: v_min_u32_e32 v4, v5, v13158; GFX10-NEXT: global_atomic_cmpswap v0, v[2:3], v[4:5], off offset:-128 glc3159; GFX10-NEXT: s_waitcnt vmcnt(0)3160; GFX10-NEXT: buffer_gl1_inv3161; GFX10-NEXT: buffer_gl0_inv3162; GFX10-NEXT: v_cmp_eq_u32_e32 vcc, v0, v53163; GFX10-NEXT: v_mov_b32_e32 v5, v03164; GFX10-NEXT: s_or_b64 s[0:1], vcc, s[0:1]3165; GFX10-NEXT: s_andn2_b64 exec, exec, s[0:1]3166; GFX10-NEXT: s_cbranch_execnz .LBB27_13167; GFX10-NEXT: ; %bb.2: ; %atomicrmw.end3168; GFX10-NEXT: s_endpgm3169;3170; GFX11-LABEL: global_umin_saddr_i32_nortn_neg128:3171; GFX11: ; %bb.0:3172; GFX11-NEXT: global_load_b32 v5, v0, s[2:3] offset:-1283173; GFX11-NEXT: v_add_co_u32 v2, s[0:1], s2, v03174; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)3175; GFX11-NEXT: v_add_co_ci_u32_e64 v3, null, s3, 0, s[0:1]3176; GFX11-NEXT: s_mov_b64 s[0:1], 03177; GFX11-NEXT: s_waitcnt_depctr depctr_sa_sdst(0)3178; GFX11-NEXT: .LBB27_1: ; %atomicrmw.start3179; GFX11-NEXT: ; =>This Inner Loop Header: Depth=13180; GFX11-NEXT: s_waitcnt vmcnt(0)3181; GFX11-NEXT: v_min_u32_e32 v4, v5, v13182; GFX11-NEXT: global_atomic_cmpswap_b32 v0, v[2:3], v[4:5], off offset:-128 glc3183; GFX11-NEXT: s_waitcnt vmcnt(0)3184; GFX11-NEXT: buffer_gl1_inv3185; GFX11-NEXT: buffer_gl0_inv3186; GFX11-NEXT: v_cmp_eq_u32_e32 vcc, v0, v53187; GFX11-NEXT: v_mov_b32_e32 v5, v03188; GFX11-NEXT: s_or_b64 s[0:1], vcc, s[0:1]3189; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)3190; GFX11-NEXT: s_and_not1_b64 exec, exec, s[0:1]3191; GFX11-NEXT: s_cbranch_execnz .LBB27_13192; GFX11-NEXT: ; %bb.2: ; %atomicrmw.end3193; GFX11-NEXT: s_endpgm3194;3195; GFX12-LABEL: global_umin_saddr_i32_nortn_neg128:3196; GFX12: ; %bb.0:3197; GFX12-NEXT: global_load_b32 v5, v0, s[2:3] offset:-1283198; GFX12-NEXT: v_add_co_u32 v2, s[0:1], s2, v03199; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)3200; GFX12-NEXT: v_add_co_ci_u32_e64 v3, null, s3, 0, s[0:1]3201; GFX12-NEXT: s_mov_b64 s[0:1], 03202; GFX12-NEXT: .LBB27_1: ; %atomicrmw.start3203; GFX12-NEXT: ; =>This Inner Loop Header: Depth=13204; GFX12-NEXT: s_wait_loadcnt 0x03205; GFX12-NEXT: v_min_u32_e32 v4, v5, v13206; GFX12-NEXT: global_wb scope:SCOPE_SYS3207; GFX12-NEXT: s_wait_storecnt 0x03208; GFX12-NEXT: global_atomic_cmpswap_b32 v0, v[2:3], v[4:5], off offset:-128 th:TH_ATOMIC_RETURN scope:SCOPE_SYS3209; GFX12-NEXT: s_wait_loadcnt 0x03210; GFX12-NEXT: global_inv scope:SCOPE_SYS3211; GFX12-NEXT: v_cmp_eq_u32_e32 vcc, v0, v53212; GFX12-NEXT: v_mov_b32_e32 v5, v03213; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)3214; GFX12-NEXT: s_or_b64 s[0:1], vcc, s[0:1]3215; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)3216; GFX12-NEXT: s_and_not1_b64 exec, exec, s[0:1]3217; GFX12-NEXT: s_cbranch_execnz .LBB27_13218; GFX12-NEXT: ; %bb.2: ; %atomicrmw.end3219; GFX12-NEXT: s_endpgm3220 %zext.offset = zext i32 %voffset to i643221 %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset3222 %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -1283223 %unused = atomicrmw umin ptr addrspace(1) %gep1, i32 %data seq_cst3224 ret void3225}3226 3227define amdgpu_ps <2 x float> @global_umin_saddr_i64_rtn(ptr addrspace(1) inreg %sbase, i32 %voffset, i64 %data) {3228; GFX9-LABEL: global_umin_saddr_i64_rtn:3229; GFX9: ; %bb.0:3230; GFX9-NEXT: global_load_dwordx2 v[3:4], v0, s[2:3]3231; GFX9-NEXT: v_mov_b32_e32 v6, s33232; GFX9-NEXT: v_add_co_u32_e32 v5, vcc, s2, v03233; GFX9-NEXT: v_addc_co_u32_e32 v6, vcc, 0, v6, vcc3234; GFX9-NEXT: s_mov_b64 s[0:1], 03235; GFX9-NEXT: .LBB28_1: ; %atomicrmw.start3236; GFX9-NEXT: ; =>This Inner Loop Header: Depth=13237; GFX9-NEXT: s_waitcnt vmcnt(0)3238; GFX9-NEXT: v_mov_b32_e32 v10, v43239; GFX9-NEXT: v_mov_b32_e32 v9, v33240; GFX9-NEXT: v_cmp_le_u64_e32 vcc, v[9:10], v[1:2]3241; GFX9-NEXT: v_cndmask_b32_e32 v8, v2, v10, vcc3242; GFX9-NEXT: v_cndmask_b32_e32 v7, v1, v9, vcc3243; GFX9-NEXT: global_atomic_cmpswap_x2 v[3:4], v[5:6], v[7:10], off glc3244; GFX9-NEXT: s_waitcnt vmcnt(0)3245; GFX9-NEXT: buffer_wbinvl13246; GFX9-NEXT: v_cmp_eq_u64_e32 vcc, v[3:4], v[9:10]3247; GFX9-NEXT: s_or_b64 s[0:1], vcc, s[0:1]3248; GFX9-NEXT: s_andn2_b64 exec, exec, s[0:1]3249; GFX9-NEXT: s_cbranch_execnz .LBB28_13250; GFX9-NEXT: ; %bb.2: ; %atomicrmw.end3251; GFX9-NEXT: s_or_b64 exec, exec, s[0:1]3252; GFX9-NEXT: v_mov_b32_e32 v0, v33253; GFX9-NEXT: v_mov_b32_e32 v1, v43254; GFX9-NEXT: ; return to shader part epilog3255;3256; GFX10-LABEL: global_umin_saddr_i64_rtn:3257; GFX10: ; %bb.0:3258; GFX10-NEXT: global_load_dwordx2 v[3:4], v0, s[2:3]3259; GFX10-NEXT: v_add_co_u32 v5, s[0:1], s2, v03260; GFX10-NEXT: v_add_co_ci_u32_e64 v6, s[0:1], s3, 0, s[0:1]3261; GFX10-NEXT: s_mov_b64 s[0:1], 03262; GFX10-NEXT: .LBB28_1: ; %atomicrmw.start3263; GFX10-NEXT: ; =>This Inner Loop Header: Depth=13264; GFX10-NEXT: s_waitcnt vmcnt(0)3265; GFX10-NEXT: v_mov_b32_e32 v10, v43266; GFX10-NEXT: v_mov_b32_e32 v9, v33267; GFX10-NEXT: v_cmp_le_u64_e32 vcc, v[9:10], v[1:2]3268; GFX10-NEXT: v_cndmask_b32_e32 v8, v2, v10, vcc3269; GFX10-NEXT: v_cndmask_b32_e32 v7, v1, v9, vcc3270; GFX10-NEXT: global_atomic_cmpswap_x2 v[3:4], v[5:6], v[7:10], off glc3271; GFX10-NEXT: s_waitcnt vmcnt(0)3272; GFX10-NEXT: buffer_gl1_inv3273; GFX10-NEXT: buffer_gl0_inv3274; GFX10-NEXT: v_cmp_eq_u64_e32 vcc, v[3:4], v[9:10]3275; GFX10-NEXT: s_or_b64 s[0:1], vcc, s[0:1]3276; GFX10-NEXT: s_andn2_b64 exec, exec, s[0:1]3277; GFX10-NEXT: s_cbranch_execnz .LBB28_13278; GFX10-NEXT: ; %bb.2: ; %atomicrmw.end3279; GFX10-NEXT: s_or_b64 exec, exec, s[0:1]3280; GFX10-NEXT: v_mov_b32_e32 v0, v33281; GFX10-NEXT: v_mov_b32_e32 v1, v43282; GFX10-NEXT: ; return to shader part epilog3283;3284; GFX11-LABEL: global_umin_saddr_i64_rtn:3285; GFX11: ; %bb.0:3286; GFX11-NEXT: global_load_b64 v[3:4], v0, s[2:3]3287; GFX11-NEXT: v_add_co_u32 v5, s[0:1], s2, v03288; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)3289; GFX11-NEXT: v_add_co_ci_u32_e64 v6, null, s3, 0, s[0:1]3290; GFX11-NEXT: s_mov_b64 s[0:1], 03291; GFX11-NEXT: s_waitcnt_depctr depctr_sa_sdst(0)3292; GFX11-NEXT: .LBB28_1: ; %atomicrmw.start3293; GFX11-NEXT: ; =>This Inner Loop Header: Depth=13294; GFX11-NEXT: s_waitcnt vmcnt(0)3295; GFX11-NEXT: v_mov_b32_e32 v10, v43296; GFX11-NEXT: v_mov_b32_e32 v9, v33297; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)3298; GFX11-NEXT: v_cmp_le_u64_e32 vcc, v[9:10], v[1:2]3299; GFX11-NEXT: v_cndmask_b32_e32 v8, v2, v10, vcc3300; GFX11-NEXT: v_cndmask_b32_e32 v7, v1, v9, vcc3301; GFX11-NEXT: global_atomic_cmpswap_b64 v[3:4], v[5:6], v[7:10], off glc3302; GFX11-NEXT: s_waitcnt vmcnt(0)3303; GFX11-NEXT: buffer_gl1_inv3304; GFX11-NEXT: buffer_gl0_inv3305; GFX11-NEXT: v_cmp_eq_u64_e32 vcc, v[3:4], v[9:10]3306; GFX11-NEXT: s_waitcnt_depctr depctr_va_vcc(0)3307; GFX11-NEXT: s_or_b64 s[0:1], vcc, s[0:1]3308; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)3309; GFX11-NEXT: s_and_not1_b64 exec, exec, s[0:1]3310; GFX11-NEXT: s_cbranch_execnz .LBB28_13311; GFX11-NEXT: ; %bb.2: ; %atomicrmw.end3312; GFX11-NEXT: s_or_b64 exec, exec, s[0:1]3313; GFX11-NEXT: v_mov_b32_e32 v0, v33314; GFX11-NEXT: v_mov_b32_e32 v1, v43315; GFX11-NEXT: ; return to shader part epilog3316;3317; GFX12-LABEL: global_umin_saddr_i64_rtn:3318; GFX12: ; %bb.0:3319; GFX12-NEXT: global_load_b64 v[3:4], v0, s[2:3]3320; GFX12-NEXT: v_add_co_u32 v5, s[0:1], s2, v03321; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)3322; GFX12-NEXT: v_add_co_ci_u32_e64 v6, null, s3, 0, s[0:1]3323; GFX12-NEXT: s_mov_b64 s[0:1], 03324; GFX12-NEXT: .LBB28_1: ; %atomicrmw.start3325; GFX12-NEXT: ; =>This Inner Loop Header: Depth=13326; GFX12-NEXT: s_wait_loadcnt 0x03327; GFX12-NEXT: v_mov_b32_e32 v10, v43328; GFX12-NEXT: v_mov_b32_e32 v9, v33329; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)3330; GFX12-NEXT: v_cmp_le_u64_e32 vcc, v[9:10], v[1:2]3331; GFX12-NEXT: s_wait_alu depctr_va_vcc(0)3332; GFX12-NEXT: v_cndmask_b32_e32 v8, v2, v10, vcc3333; GFX12-NEXT: v_cndmask_b32_e32 v7, v1, v9, vcc3334; GFX12-NEXT: global_wb scope:SCOPE_SYS3335; GFX12-NEXT: s_wait_storecnt 0x03336; GFX12-NEXT: global_atomic_cmpswap_b64 v[3:4], v[5:6], v[7:10], off th:TH_ATOMIC_RETURN scope:SCOPE_SYS3337; GFX12-NEXT: s_wait_loadcnt 0x03338; GFX12-NEXT: global_inv scope:SCOPE_SYS3339; GFX12-NEXT: v_cmp_eq_u64_e32 vcc, v[3:4], v[9:10]3340; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)3341; GFX12-NEXT: s_or_b64 s[0:1], vcc, s[0:1]3342; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)3343; GFX12-NEXT: s_and_not1_b64 exec, exec, s[0:1]3344; GFX12-NEXT: s_cbranch_execnz .LBB28_13345; GFX12-NEXT: ; %bb.2: ; %atomicrmw.end3346; GFX12-NEXT: s_or_b64 exec, exec, s[0:1]3347; GFX12-NEXT: v_mov_b32_e32 v0, v33348; GFX12-NEXT: v_mov_b32_e32 v1, v43349; GFX12-NEXT: s_wait_loadcnt 0x03350; GFX12-NEXT: ; return to shader part epilog3351 %zext.offset = zext i32 %voffset to i643352 %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset3353 %rtn = atomicrmw umin ptr addrspace(1) %gep0, i64 %data seq_cst3354 %cast.rtn = bitcast i64 %rtn to <2 x float>3355 ret <2 x float> %cast.rtn3356}3357 3358define amdgpu_ps <2 x float> @global_umin_saddr_i64_rtn_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, i64 %data) {3359; GFX9-LABEL: global_umin_saddr_i64_rtn_neg128:3360; GFX9: ; %bb.0:3361; GFX9-NEXT: global_load_dwordx2 v[3:4], v0, s[2:3] offset:-1283362; GFX9-NEXT: v_mov_b32_e32 v6, s33363; GFX9-NEXT: v_add_co_u32_e32 v5, vcc, s2, v03364; GFX9-NEXT: v_addc_co_u32_e32 v6, vcc, 0, v6, vcc3365; GFX9-NEXT: s_mov_b64 s[0:1], 03366; GFX9-NEXT: .LBB29_1: ; %atomicrmw.start3367; GFX9-NEXT: ; =>This Inner Loop Header: Depth=13368; GFX9-NEXT: s_waitcnt vmcnt(0)3369; GFX9-NEXT: v_mov_b32_e32 v10, v43370; GFX9-NEXT: v_mov_b32_e32 v9, v33371; GFX9-NEXT: v_cmp_le_u64_e32 vcc, v[9:10], v[1:2]3372; GFX9-NEXT: v_cndmask_b32_e32 v8, v2, v10, vcc3373; GFX9-NEXT: v_cndmask_b32_e32 v7, v1, v9, vcc3374; GFX9-NEXT: global_atomic_cmpswap_x2 v[3:4], v[5:6], v[7:10], off offset:-128 glc3375; GFX9-NEXT: s_waitcnt vmcnt(0)3376; GFX9-NEXT: buffer_wbinvl13377; GFX9-NEXT: v_cmp_eq_u64_e32 vcc, v[3:4], v[9:10]3378; GFX9-NEXT: s_or_b64 s[0:1], vcc, s[0:1]3379; GFX9-NEXT: s_andn2_b64 exec, exec, s[0:1]3380; GFX9-NEXT: s_cbranch_execnz .LBB29_13381; GFX9-NEXT: ; %bb.2: ; %atomicrmw.end3382; GFX9-NEXT: s_or_b64 exec, exec, s[0:1]3383; GFX9-NEXT: v_mov_b32_e32 v0, v33384; GFX9-NEXT: v_mov_b32_e32 v1, v43385; GFX9-NEXT: ; return to shader part epilog3386;3387; GFX10-LABEL: global_umin_saddr_i64_rtn_neg128:3388; GFX10: ; %bb.0:3389; GFX10-NEXT: global_load_dwordx2 v[3:4], v0, s[2:3] offset:-1283390; GFX10-NEXT: v_add_co_u32 v5, s[0:1], s2, v03391; GFX10-NEXT: v_add_co_ci_u32_e64 v6, s[0:1], s3, 0, s[0:1]3392; GFX10-NEXT: s_mov_b64 s[0:1], 03393; GFX10-NEXT: .LBB29_1: ; %atomicrmw.start3394; GFX10-NEXT: ; =>This Inner Loop Header: Depth=13395; GFX10-NEXT: s_waitcnt vmcnt(0)3396; GFX10-NEXT: v_mov_b32_e32 v10, v43397; GFX10-NEXT: v_mov_b32_e32 v9, v33398; GFX10-NEXT: v_cmp_le_u64_e32 vcc, v[9:10], v[1:2]3399; GFX10-NEXT: v_cndmask_b32_e32 v8, v2, v10, vcc3400; GFX10-NEXT: v_cndmask_b32_e32 v7, v1, v9, vcc3401; GFX10-NEXT: global_atomic_cmpswap_x2 v[3:4], v[5:6], v[7:10], off offset:-128 glc3402; GFX10-NEXT: s_waitcnt vmcnt(0)3403; GFX10-NEXT: buffer_gl1_inv3404; GFX10-NEXT: buffer_gl0_inv3405; GFX10-NEXT: v_cmp_eq_u64_e32 vcc, v[3:4], v[9:10]3406; GFX10-NEXT: s_or_b64 s[0:1], vcc, s[0:1]3407; GFX10-NEXT: s_andn2_b64 exec, exec, s[0:1]3408; GFX10-NEXT: s_cbranch_execnz .LBB29_13409; GFX10-NEXT: ; %bb.2: ; %atomicrmw.end3410; GFX10-NEXT: s_or_b64 exec, exec, s[0:1]3411; GFX10-NEXT: v_mov_b32_e32 v0, v33412; GFX10-NEXT: v_mov_b32_e32 v1, v43413; GFX10-NEXT: ; return to shader part epilog3414;3415; GFX11-LABEL: global_umin_saddr_i64_rtn_neg128:3416; GFX11: ; %bb.0:3417; GFX11-NEXT: global_load_b64 v[3:4], v0, s[2:3] offset:-1283418; GFX11-NEXT: v_add_co_u32 v5, s[0:1], s2, v03419; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)3420; GFX11-NEXT: v_add_co_ci_u32_e64 v6, null, s3, 0, s[0:1]3421; GFX11-NEXT: s_mov_b64 s[0:1], 03422; GFX11-NEXT: s_waitcnt_depctr depctr_sa_sdst(0)3423; GFX11-NEXT: .LBB29_1: ; %atomicrmw.start3424; GFX11-NEXT: ; =>This Inner Loop Header: Depth=13425; GFX11-NEXT: s_waitcnt vmcnt(0)3426; GFX11-NEXT: v_mov_b32_e32 v10, v43427; GFX11-NEXT: v_mov_b32_e32 v9, v33428; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)3429; GFX11-NEXT: v_cmp_le_u64_e32 vcc, v[9:10], v[1:2]3430; GFX11-NEXT: v_cndmask_b32_e32 v8, v2, v10, vcc3431; GFX11-NEXT: v_cndmask_b32_e32 v7, v1, v9, vcc3432; GFX11-NEXT: global_atomic_cmpswap_b64 v[3:4], v[5:6], v[7:10], off offset:-128 glc3433; GFX11-NEXT: s_waitcnt vmcnt(0)3434; GFX11-NEXT: buffer_gl1_inv3435; GFX11-NEXT: buffer_gl0_inv3436; GFX11-NEXT: v_cmp_eq_u64_e32 vcc, v[3:4], v[9:10]3437; GFX11-NEXT: s_waitcnt_depctr depctr_va_vcc(0)3438; GFX11-NEXT: s_or_b64 s[0:1], vcc, s[0:1]3439; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)3440; GFX11-NEXT: s_and_not1_b64 exec, exec, s[0:1]3441; GFX11-NEXT: s_cbranch_execnz .LBB29_13442; GFX11-NEXT: ; %bb.2: ; %atomicrmw.end3443; GFX11-NEXT: s_or_b64 exec, exec, s[0:1]3444; GFX11-NEXT: v_mov_b32_e32 v0, v33445; GFX11-NEXT: v_mov_b32_e32 v1, v43446; GFX11-NEXT: ; return to shader part epilog3447;3448; GFX12-LABEL: global_umin_saddr_i64_rtn_neg128:3449; GFX12: ; %bb.0:3450; GFX12-NEXT: global_load_b64 v[3:4], v0, s[2:3] offset:-1283451; GFX12-NEXT: v_add_co_u32 v5, s[0:1], s2, v03452; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)3453; GFX12-NEXT: v_add_co_ci_u32_e64 v6, null, s3, 0, s[0:1]3454; GFX12-NEXT: s_mov_b64 s[0:1], 03455; GFX12-NEXT: .LBB29_1: ; %atomicrmw.start3456; GFX12-NEXT: ; =>This Inner Loop Header: Depth=13457; GFX12-NEXT: s_wait_loadcnt 0x03458; GFX12-NEXT: v_mov_b32_e32 v10, v43459; GFX12-NEXT: v_mov_b32_e32 v9, v33460; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)3461; GFX12-NEXT: v_cmp_le_u64_e32 vcc, v[9:10], v[1:2]3462; GFX12-NEXT: s_wait_alu depctr_va_vcc(0)3463; GFX12-NEXT: v_cndmask_b32_e32 v8, v2, v10, vcc3464; GFX12-NEXT: v_cndmask_b32_e32 v7, v1, v9, vcc3465; GFX12-NEXT: global_wb scope:SCOPE_SYS3466; GFX12-NEXT: s_wait_storecnt 0x03467; GFX12-NEXT: global_atomic_cmpswap_b64 v[3:4], v[5:6], v[7:10], off offset:-128 th:TH_ATOMIC_RETURN scope:SCOPE_SYS3468; GFX12-NEXT: s_wait_loadcnt 0x03469; GFX12-NEXT: global_inv scope:SCOPE_SYS3470; GFX12-NEXT: v_cmp_eq_u64_e32 vcc, v[3:4], v[9:10]3471; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)3472; GFX12-NEXT: s_or_b64 s[0:1], vcc, s[0:1]3473; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)3474; GFX12-NEXT: s_and_not1_b64 exec, exec, s[0:1]3475; GFX12-NEXT: s_cbranch_execnz .LBB29_13476; GFX12-NEXT: ; %bb.2: ; %atomicrmw.end3477; GFX12-NEXT: s_or_b64 exec, exec, s[0:1]3478; GFX12-NEXT: v_mov_b32_e32 v0, v33479; GFX12-NEXT: v_mov_b32_e32 v1, v43480; GFX12-NEXT: s_wait_loadcnt 0x03481; GFX12-NEXT: ; return to shader part epilog3482 %zext.offset = zext i32 %voffset to i643483 %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset3484 %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -1283485 %rtn = atomicrmw umin ptr addrspace(1) %gep1, i64 %data seq_cst3486 %cast.rtn = bitcast i64 %rtn to <2 x float>3487 ret <2 x float> %cast.rtn3488}3489 3490define amdgpu_ps void @global_umin_saddr_i64_nortn(ptr addrspace(1) inreg %sbase, i32 %voffset, i64 %data) {3491; GFX9-LABEL: global_umin_saddr_i64_nortn:3492; GFX9: ; %bb.0:3493; GFX9-NEXT: global_load_dwordx2 v[5:6], v0, s[2:3]3494; GFX9-NEXT: v_mov_b32_e32 v3, s33495; GFX9-NEXT: v_add_co_u32_e32 v7, vcc, s2, v03496; GFX9-NEXT: v_addc_co_u32_e32 v8, vcc, 0, v3, vcc3497; GFX9-NEXT: s_mov_b64 s[0:1], 03498; GFX9-NEXT: .LBB30_1: ; %atomicrmw.start3499; GFX9-NEXT: ; =>This Inner Loop Header: Depth=13500; GFX9-NEXT: s_waitcnt vmcnt(0)3501; GFX9-NEXT: v_cmp_le_u64_e32 vcc, v[5:6], v[1:2]3502; GFX9-NEXT: v_cndmask_b32_e32 v4, v2, v6, vcc3503; GFX9-NEXT: v_cndmask_b32_e32 v3, v1, v5, vcc3504; GFX9-NEXT: global_atomic_cmpswap_x2 v[3:4], v[7:8], v[3:6], off glc3505; GFX9-NEXT: s_waitcnt vmcnt(0)3506; GFX9-NEXT: buffer_wbinvl13507; GFX9-NEXT: v_cmp_eq_u64_e32 vcc, v[3:4], v[5:6]3508; GFX9-NEXT: v_mov_b32_e32 v6, v43509; GFX9-NEXT: s_or_b64 s[0:1], vcc, s[0:1]3510; GFX9-NEXT: v_mov_b32_e32 v5, v33511; GFX9-NEXT: s_andn2_b64 exec, exec, s[0:1]3512; GFX9-NEXT: s_cbranch_execnz .LBB30_13513; GFX9-NEXT: ; %bb.2: ; %atomicrmw.end3514; GFX9-NEXT: s_endpgm3515;3516; GFX10-LABEL: global_umin_saddr_i64_nortn:3517; GFX10: ; %bb.0:3518; GFX10-NEXT: global_load_dwordx2 v[5:6], v0, s[2:3]3519; GFX10-NEXT: v_add_co_u32 v7, s[0:1], s2, v03520; GFX10-NEXT: v_add_co_ci_u32_e64 v8, s[0:1], s3, 0, s[0:1]3521; GFX10-NEXT: s_mov_b64 s[0:1], 03522; GFX10-NEXT: .LBB30_1: ; %atomicrmw.start3523; GFX10-NEXT: ; =>This Inner Loop Header: Depth=13524; GFX10-NEXT: s_waitcnt vmcnt(0)3525; GFX10-NEXT: v_cmp_le_u64_e32 vcc, v[5:6], v[1:2]3526; GFX10-NEXT: v_cndmask_b32_e32 v4, v2, v6, vcc3527; GFX10-NEXT: v_cndmask_b32_e32 v3, v1, v5, vcc3528; GFX10-NEXT: global_atomic_cmpswap_x2 v[3:4], v[7:8], v[3:6], off glc3529; GFX10-NEXT: s_waitcnt vmcnt(0)3530; GFX10-NEXT: buffer_gl1_inv3531; GFX10-NEXT: buffer_gl0_inv3532; GFX10-NEXT: v_cmp_eq_u64_e32 vcc, v[3:4], v[5:6]3533; GFX10-NEXT: v_mov_b32_e32 v6, v43534; GFX10-NEXT: v_mov_b32_e32 v5, v33535; GFX10-NEXT: s_or_b64 s[0:1], vcc, s[0:1]3536; GFX10-NEXT: s_andn2_b64 exec, exec, s[0:1]3537; GFX10-NEXT: s_cbranch_execnz .LBB30_13538; GFX10-NEXT: ; %bb.2: ; %atomicrmw.end3539; GFX10-NEXT: s_endpgm3540;3541; GFX11-LABEL: global_umin_saddr_i64_nortn:3542; GFX11: ; %bb.0:3543; GFX11-NEXT: global_load_b64 v[5:6], v0, s[2:3]3544; GFX11-NEXT: v_add_co_u32 v7, s[0:1], s2, v03545; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)3546; GFX11-NEXT: v_add_co_ci_u32_e64 v8, null, s3, 0, s[0:1]3547; GFX11-NEXT: s_mov_b64 s[0:1], 03548; GFX11-NEXT: s_waitcnt_depctr depctr_sa_sdst(0)3549; GFX11-NEXT: .LBB30_1: ; %atomicrmw.start3550; GFX11-NEXT: ; =>This Inner Loop Header: Depth=13551; GFX11-NEXT: s_waitcnt vmcnt(0)3552; GFX11-NEXT: v_cmp_le_u64_e32 vcc, v[5:6], v[1:2]3553; GFX11-NEXT: v_cndmask_b32_e32 v4, v2, v6, vcc3554; GFX11-NEXT: v_cndmask_b32_e32 v3, v1, v5, vcc3555; GFX11-NEXT: global_atomic_cmpswap_b64 v[3:4], v[7:8], v[3:6], off glc3556; GFX11-NEXT: s_waitcnt vmcnt(0)3557; GFX11-NEXT: buffer_gl1_inv3558; GFX11-NEXT: buffer_gl0_inv3559; GFX11-NEXT: v_cmp_eq_u64_e32 vcc, v[3:4], v[5:6]3560; GFX11-NEXT: s_waitcnt_depctr depctr_va_vcc(0)3561; GFX11-NEXT: v_mov_b32_e32 v6, v43562; GFX11-NEXT: v_mov_b32_e32 v5, v33563; GFX11-NEXT: s_or_b64 s[0:1], vcc, s[0:1]3564; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)3565; GFX11-NEXT: s_and_not1_b64 exec, exec, s[0:1]3566; GFX11-NEXT: s_cbranch_execnz .LBB30_13567; GFX11-NEXT: ; %bb.2: ; %atomicrmw.end3568; GFX11-NEXT: s_endpgm3569;3570; GFX12-LABEL: global_umin_saddr_i64_nortn:3571; GFX12: ; %bb.0:3572; GFX12-NEXT: global_load_b64 v[5:6], v0, s[2:3]3573; GFX12-NEXT: v_add_co_u32 v7, s[0:1], s2, v03574; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)3575; GFX12-NEXT: v_add_co_ci_u32_e64 v8, null, s3, 0, s[0:1]3576; GFX12-NEXT: s_mov_b64 s[0:1], 03577; GFX12-NEXT: .LBB30_1: ; %atomicrmw.start3578; GFX12-NEXT: ; =>This Inner Loop Header: Depth=13579; GFX12-NEXT: s_wait_loadcnt 0x03580; GFX12-NEXT: v_cmp_le_u64_e32 vcc, v[5:6], v[1:2]3581; GFX12-NEXT: s_wait_alu depctr_va_vcc(0)3582; GFX12-NEXT: v_cndmask_b32_e32 v4, v2, v6, vcc3583; GFX12-NEXT: v_cndmask_b32_e32 v3, v1, v5, vcc3584; GFX12-NEXT: global_wb scope:SCOPE_SYS3585; GFX12-NEXT: s_wait_storecnt 0x03586; GFX12-NEXT: global_atomic_cmpswap_b64 v[3:4], v[7:8], v[3:6], off th:TH_ATOMIC_RETURN scope:SCOPE_SYS3587; GFX12-NEXT: s_wait_loadcnt 0x03588; GFX12-NEXT: global_inv scope:SCOPE_SYS3589; GFX12-NEXT: v_cmp_eq_u64_e32 vcc, v[3:4], v[5:6]3590; GFX12-NEXT: v_mov_b32_e32 v6, v43591; GFX12-NEXT: v_mov_b32_e32 v5, v33592; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)3593; GFX12-NEXT: s_or_b64 s[0:1], vcc, s[0:1]3594; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)3595; GFX12-NEXT: s_and_not1_b64 exec, exec, s[0:1]3596; GFX12-NEXT: s_cbranch_execnz .LBB30_13597; GFX12-NEXT: ; %bb.2: ; %atomicrmw.end3598; GFX12-NEXT: s_endpgm3599 %zext.offset = zext i32 %voffset to i643600 %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset3601 %unused = atomicrmw umin ptr addrspace(1) %gep0, i64 %data seq_cst3602 ret void3603}3604 3605define amdgpu_ps void @global_umin_saddr_i64_nortn_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, i64 %data) {3606; GFX9-LABEL: global_umin_saddr_i64_nortn_neg128:3607; GFX9: ; %bb.0:3608; GFX9-NEXT: global_load_dwordx2 v[5:6], v0, s[2:3] offset:-1283609; GFX9-NEXT: v_mov_b32_e32 v3, s33610; GFX9-NEXT: v_add_co_u32_e32 v7, vcc, s2, v03611; GFX9-NEXT: v_addc_co_u32_e32 v8, vcc, 0, v3, vcc3612; GFX9-NEXT: s_mov_b64 s[0:1], 03613; GFX9-NEXT: .LBB31_1: ; %atomicrmw.start3614; GFX9-NEXT: ; =>This Inner Loop Header: Depth=13615; GFX9-NEXT: s_waitcnt vmcnt(0)3616; GFX9-NEXT: v_cmp_le_u64_e32 vcc, v[5:6], v[1:2]3617; GFX9-NEXT: v_cndmask_b32_e32 v4, v2, v6, vcc3618; GFX9-NEXT: v_cndmask_b32_e32 v3, v1, v5, vcc3619; GFX9-NEXT: global_atomic_cmpswap_x2 v[3:4], v[7:8], v[3:6], off offset:-128 glc3620; GFX9-NEXT: s_waitcnt vmcnt(0)3621; GFX9-NEXT: buffer_wbinvl13622; GFX9-NEXT: v_cmp_eq_u64_e32 vcc, v[3:4], v[5:6]3623; GFX9-NEXT: v_mov_b32_e32 v6, v43624; GFX9-NEXT: s_or_b64 s[0:1], vcc, s[0:1]3625; GFX9-NEXT: v_mov_b32_e32 v5, v33626; GFX9-NEXT: s_andn2_b64 exec, exec, s[0:1]3627; GFX9-NEXT: s_cbranch_execnz .LBB31_13628; GFX9-NEXT: ; %bb.2: ; %atomicrmw.end3629; GFX9-NEXT: s_endpgm3630;3631; GFX10-LABEL: global_umin_saddr_i64_nortn_neg128:3632; GFX10: ; %bb.0:3633; GFX10-NEXT: global_load_dwordx2 v[5:6], v0, s[2:3] offset:-1283634; GFX10-NEXT: v_add_co_u32 v7, s[0:1], s2, v03635; GFX10-NEXT: v_add_co_ci_u32_e64 v8, s[0:1], s3, 0, s[0:1]3636; GFX10-NEXT: s_mov_b64 s[0:1], 03637; GFX10-NEXT: .LBB31_1: ; %atomicrmw.start3638; GFX10-NEXT: ; =>This Inner Loop Header: Depth=13639; GFX10-NEXT: s_waitcnt vmcnt(0)3640; GFX10-NEXT: v_cmp_le_u64_e32 vcc, v[5:6], v[1:2]3641; GFX10-NEXT: v_cndmask_b32_e32 v4, v2, v6, vcc3642; GFX10-NEXT: v_cndmask_b32_e32 v3, v1, v5, vcc3643; GFX10-NEXT: global_atomic_cmpswap_x2 v[3:4], v[7:8], v[3:6], off offset:-128 glc3644; GFX10-NEXT: s_waitcnt vmcnt(0)3645; GFX10-NEXT: buffer_gl1_inv3646; GFX10-NEXT: buffer_gl0_inv3647; GFX10-NEXT: v_cmp_eq_u64_e32 vcc, v[3:4], v[5:6]3648; GFX10-NEXT: v_mov_b32_e32 v6, v43649; GFX10-NEXT: v_mov_b32_e32 v5, v33650; GFX10-NEXT: s_or_b64 s[0:1], vcc, s[0:1]3651; GFX10-NEXT: s_andn2_b64 exec, exec, s[0:1]3652; GFX10-NEXT: s_cbranch_execnz .LBB31_13653; GFX10-NEXT: ; %bb.2: ; %atomicrmw.end3654; GFX10-NEXT: s_endpgm3655;3656; GFX11-LABEL: global_umin_saddr_i64_nortn_neg128:3657; GFX11: ; %bb.0:3658; GFX11-NEXT: global_load_b64 v[5:6], v0, s[2:3] offset:-1283659; GFX11-NEXT: v_add_co_u32 v7, s[0:1], s2, v03660; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)3661; GFX11-NEXT: v_add_co_ci_u32_e64 v8, null, s3, 0, s[0:1]3662; GFX11-NEXT: s_mov_b64 s[0:1], 03663; GFX11-NEXT: s_waitcnt_depctr depctr_sa_sdst(0)3664; GFX11-NEXT: .LBB31_1: ; %atomicrmw.start3665; GFX11-NEXT: ; =>This Inner Loop Header: Depth=13666; GFX11-NEXT: s_waitcnt vmcnt(0)3667; GFX11-NEXT: v_cmp_le_u64_e32 vcc, v[5:6], v[1:2]3668; GFX11-NEXT: v_cndmask_b32_e32 v4, v2, v6, vcc3669; GFX11-NEXT: v_cndmask_b32_e32 v3, v1, v5, vcc3670; GFX11-NEXT: global_atomic_cmpswap_b64 v[3:4], v[7:8], v[3:6], off offset:-128 glc3671; GFX11-NEXT: s_waitcnt vmcnt(0)3672; GFX11-NEXT: buffer_gl1_inv3673; GFX11-NEXT: buffer_gl0_inv3674; GFX11-NEXT: v_cmp_eq_u64_e32 vcc, v[3:4], v[5:6]3675; GFX11-NEXT: s_waitcnt_depctr depctr_va_vcc(0)3676; GFX11-NEXT: v_mov_b32_e32 v6, v43677; GFX11-NEXT: v_mov_b32_e32 v5, v33678; GFX11-NEXT: s_or_b64 s[0:1], vcc, s[0:1]3679; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)3680; GFX11-NEXT: s_and_not1_b64 exec, exec, s[0:1]3681; GFX11-NEXT: s_cbranch_execnz .LBB31_13682; GFX11-NEXT: ; %bb.2: ; %atomicrmw.end3683; GFX11-NEXT: s_endpgm3684;3685; GFX12-LABEL: global_umin_saddr_i64_nortn_neg128:3686; GFX12: ; %bb.0:3687; GFX12-NEXT: global_load_b64 v[5:6], v0, s[2:3] offset:-1283688; GFX12-NEXT: v_add_co_u32 v7, s[0:1], s2, v03689; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)3690; GFX12-NEXT: v_add_co_ci_u32_e64 v8, null, s3, 0, s[0:1]3691; GFX12-NEXT: s_mov_b64 s[0:1], 03692; GFX12-NEXT: .LBB31_1: ; %atomicrmw.start3693; GFX12-NEXT: ; =>This Inner Loop Header: Depth=13694; GFX12-NEXT: s_wait_loadcnt 0x03695; GFX12-NEXT: v_cmp_le_u64_e32 vcc, v[5:6], v[1:2]3696; GFX12-NEXT: s_wait_alu depctr_va_vcc(0)3697; GFX12-NEXT: v_cndmask_b32_e32 v4, v2, v6, vcc3698; GFX12-NEXT: v_cndmask_b32_e32 v3, v1, v5, vcc3699; GFX12-NEXT: global_wb scope:SCOPE_SYS3700; GFX12-NEXT: s_wait_storecnt 0x03701; GFX12-NEXT: global_atomic_cmpswap_b64 v[3:4], v[7:8], v[3:6], off offset:-128 th:TH_ATOMIC_RETURN scope:SCOPE_SYS3702; GFX12-NEXT: s_wait_loadcnt 0x03703; GFX12-NEXT: global_inv scope:SCOPE_SYS3704; GFX12-NEXT: v_cmp_eq_u64_e32 vcc, v[3:4], v[5:6]3705; GFX12-NEXT: v_mov_b32_e32 v6, v43706; GFX12-NEXT: v_mov_b32_e32 v5, v33707; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)3708; GFX12-NEXT: s_or_b64 s[0:1], vcc, s[0:1]3709; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)3710; GFX12-NEXT: s_and_not1_b64 exec, exec, s[0:1]3711; GFX12-NEXT: s_cbranch_execnz .LBB31_13712; GFX12-NEXT: ; %bb.2: ; %atomicrmw.end3713; GFX12-NEXT: s_endpgm3714 %zext.offset = zext i32 %voffset to i643715 %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset3716 %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -1283717 %unused = atomicrmw umin ptr addrspace(1) %gep1, i64 %data seq_cst3718 ret void3719}3720 3721attributes #0 = { argmemonly nounwind willreturn }3722